如何编写通用的匿名方法?

具体来说,我想写这个:

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}"); }