如何编写通用的匿名方法?
具体来说,我想写这个:
public Func<IList, T> SelectElement = list => list.First();
但是我在T
处遇到语法错误。 我不能拥有通用的匿名方法吗?
不,谢谢。 这将需要通用字段或通用属性,这些属性不是C#支持的function。 你能做的最好的事情就是制作一个引入T的通用方法:
public Func, T> SelectionMethod() { return list => list.First(); }
现在你可以说:
Func, int> selectInts = SelectionMethod();
你当然可以,但必须知道T
:
class Foo { public Func, T> SelectionMethod = list => list.First(); }
作为替代方法,如果您不想使包含类具有通用性,则可以使用generics方法:
public Func, T> SelectionMethod() { return list => list.First(); }
但是仍然有人在编译时需要知道这个T
您只将返回类型声明为generics。
试试这个:
public Func, T> SelectionMethod() { return list => list.First(); }
您声明的事物的名称必须包含它作为通用的类型参数。 编译器仅支持generics类和generics方法。
因此,对于通用类,您必须具备
class MyGeneric { // You can use T here now public T MyField; }
或者,对于方法
public T MyGenericMethod( /* Parameters */ ) { return T; }
只有首先在方法名称中声明了T才能使用T作为返回参数。
即使看起来在实际方法之前声明了返回类型,编译器也不会以这种方式读取它。
public static void SomeContainerFunction() { const string NULL_VALUE = (string)null; Type GetValueType(T value) => value?.GetType() ?? typeof(T); var typeOfNullValue = GetValueType(NULL_VALUE); Debug.WriteLine($"Value: {NULL_VALUE}, Type: {typeOfNullValue}"); }