我有以下代码:
public static class CardView {
public static object Column<TModel, TResult>(Func<TModel, TResult> field) {
return null;
}
}
public class Person
{
public string Name { get; set; }
public bool Gender { get; set; }
}
void Main()
{
var model = new Person() { Name = "Andre", Gender = true };
var b = CardView.Column(model => model.Name); // ERROR
// The type arguments for method 'UserQuery.CardView.Column<TModel,TResult>(System.Func<TModel,TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
}
由于某种原因,它无法推断出
Column
方法的泛型类型。我需要知道为什么。我不能放弃类型推断并自己指定类型,因为这只是一个大问题的案例研究,在那里它将是不可或缺的。编辑:
我拼错了代码=/已经修复
TModel
?提供的 lambda 表达式对于任何具有Name
属性的类都是“有效”的。 - Damien_The_Unbeliever.Column
方法能够确定你的意思是将m
表示为model
? - Marcnew List<Person>().Select(m => m.Name)
,这将为您提供一个IEnumerable<string>
,而不依赖于Person对象。 - Ivaylo SlavovList<Person>
。当推断调用Select的两个类型参数时,类型推断引擎确实依赖于知道集合元素的类型。 - Eric Lippert