Özellikle, bunu yazmak istiyorum:Genel bir anonim yöntem nasıl yazabilirim?
public Func<IList<T>, T> SelectElement = list => list.First();
Ama T
bir sözdizimi hatası alıyorum. Genel bir anonim yönteme sahip olamaz mıyım?
Özellikle, bunu yazmak istiyorum:Genel bir anonim yöntem nasıl yazabilirim?
public Func<IList<T>, T> SelectElement = list => list.First();
Ama T
bir sözdizimi hatası alıyorum. Genel bir anonim yönteme sahip olamaz mıyım?
Hayır, üzgünüm. Bu, C# destekleyen özellikleri olmayan genel alanlar veya genel özellikler gerektirir. Yapabileceğiniz en iyi T tanıtır genel bir yöntem yapmak geçerli:
public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }
Ve şimdi söyleyebiliriz:
Func<IList<int>, int> selectInts = SelectionMethod<int>();
ancak T
bilinmelidir:
public Func<IList<T>, T> SelectionMethod<T>()
{
return list => list.First();
}
: Eğer jenerik içeren sınıf yapmak istemiyorsanız, bir generic yöntemi kullanabilirsiniz Alternatif olarak
class Foo<T>
{
public Func<IList<T>, T> SelectionMethod = list => list.First();
}
Ama hala derleme zamanında birisinin bu T
'u bilmesi gerekecek.
Evet, sorun bu. T'nin ne olduğunu bilmiyorum. Bir char veya bir dize olabilir. – mpen
Peki, umarım, “Foo
Peki, yönteminiz veya sınıfınız, 'T' jenerik parametresini almalıdır. – cdhowie
Yalnızca dönüş türünü genel olarak bildirdiniz.
bu deneyin:
public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }
bunu bir genel olması için tip parametrelerini içermelidir bildiriyorlar şeyin adı. Derleyici, yalnızca genel sınıfları ve genel yöntemleri destekler.
Yani, genel bir sınıf için size yöntemlere
için,class MyGeneric<T> {
// You can use T here now
public T MyField;
}
sahip Ya gerekir
public T MyGenericMethod<T>(/* Parameters */) { return T; }
ilk yöntem adına ilan edildi ancak eğer, dönüş parametresi olarak T kullanabilirsiniz
.
Geri dönüş türü gerçek yöntemden önce bildirilmiş gibi görünse bile, derleyici bu şekilde okumaz.
public static void SomeContainerFunction()
{
const string NULL_VALUE = (string)null;
Type GetValueType<T>(T value) => value?.GetType() ?? typeof(T);
var typeOfNullValue = GetValueType(NULL_VALUE);
Debug.WriteLine($"Value: {NULL_VALUE}, Type: {typeOfNullValue}");
}
SO'ya hoş geldiniz. Bir soruya cevap verirken lütfen kodunuzla ilişkili açıklama sağlayın. Bazı kişiler kodunuzu anlayamayabilir veya soruyu nasıl yanıtladığını görmeyebilir. [İyi bir cevap nasıl yazılır] bölümüne bakın (https://stackoverflow.com/help/how-to-answer) – Nuageux
çözüldü! http://stackoverflow.com/questions/4338867 – mpen