【发布时间】:2011-06-02 01:51:35
【问题描述】:
给定以下类:
public class Class1<TObject> {
protected void MethodA<TType>(Expression<Func<TObject, TType>> property, ref TType store, TType value) {
}
}
public class Class2<TObject> : Class1<Class2<TObject>>{
private int _propertyInt;
public int PropertyInt {
get { return _propertyInt; }
set { MethodA(c2 => c2.PropertyInt, ref _propertyInt, value); }
}
}
public class Class3 : Class2<Class3> {
private float _propertyFloat;
public float PropertyFloat {
get { return _propertyFloat; }
set { MethodA(c3 => c3.PropertyFloat, ref _propertyFloat, value); }
}
}
对于 Class2,C# 编译器为“PropertyInt”属性设置器中的 lambda 表达式推断基类的泛型类型,但对于 Class3,编译器推断基类,而不仅仅是基类的泛型类型。为什么是这样?代码示例中推断类型的标准是什么。谢谢。
【问题讨论】:
标签: c# lambda type-inference