具体而言,我想这样写:
public Func<IList<T>, T> SelectElement = list => list.First();
但我得到一个语法错误T
。 我不能有一个通用的匿名方法?
具体而言,我想这样写:
public Func<IList<T>, T> SelectElement = list => list.First();
但我得到一个语法错误T
。 我不能有一个通用的匿名方法?
不,谢谢。 这就需要通用字段或通用性,这是不是C#支持的功能。 你能做的最好的是使该引入T A泛型方法:
public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }
现在,你可以说:
Func<IList<int>, int> selectInts = SelectionMethod<int>();
当然,你可以,但T
必须知道:
class Foo<T>
{
public Func<IList<T>, T> SelectionMethod = list => list.First();
}
作为替代,你可以使用一个通用的方法,如果你不想让包含类通用:
public Func<IList<T>, T> SelectionMethod<T>()
{
return list => list.First();
}
但还是有人在编译时需要知道这个T
。
你只能声明返回类型为通用。
试试这个:
public Func<IList<T>, T> SelectionMethod<T>() { return list => list.First(); }
你正在申报必须包括类型参数为它是一个通用的东西的名字。 编译器仅支持泛型类和泛型方法。
因此,对于通用类,你必须有
class MyGeneric<T> {
// You can use T here now
public T MyField;
}
或者,对于方法
public T MyGenericMethod<T>( /* Parameters */ ) { return T; }
您可以使用T作为返回参数,只有当它是在方法名宣布第一。
虽然它看起来像返回类型的实际方法之前声明,编译器不读这种方式。
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}");
}