为什么C#lambda表达式在类范围内使用时不能使用实例属性和字段?见这个例子:
public class Point:INotifyPropertyChanged
{
public float X {get; set;}
public float Y {get; set;}
PropertyChangedEventHandler onPointsPropertyChanged = (_, e) =>
{
X = 5;
Y = 5; //Trying to access instace properties, but a compilation error occurs
};
...
}
为什么不允许这样做?
修改
如果我们能做到:
public class Point:INotifyPropertyChanged
{
public float X {get; set;}
public float Y {get; set;}
PropertyChangedEventHandler onPointsPropertyChanged;
public Point()
{
onPointsPropertyChanged = (_, e) =>
{
X = 5;
Y = 5;
};
}
...
}
为什么我们不能像类范围内的其他字段一样初始化onPointsPropertyChanged
?对于instancie:int a = 5
。始终在构造函数执行后使用字段onPointsPropertyChanged
。
答案 0 :(得分:8)
答案 1 :(得分:6)
字段初始值设定项不能引用非静态字段,方法或属性...
在执行构造函数之前执行字段初始值设定项。在执行构造函数之前,不允许引用任何字段或属性。
更改初始化以在类构造函数中设置lambda函数:
public class Point : INotifyPropertyChanged
{
public float X { get; set; }
public float Y { get; set; }
PropertyChangedEventHandler onPointsPropertyChanged;
public Point()
{
onPointsPropertyChanged = (_, e) =>
{
X = 5;
Y = 5;
};
}
}
答案 2 :(得分:-2)
你指的是什么实例?在创建lambda表达式时,尚未创建任何实例;那么这些对X和Y的调用会被绑定到什么实例?