假设我有一个类似于以下内容的对象初始值设定项:
var coolObject = new CoolObject()
{
GetObjectState = () => coolObject.InternalState;
}
其中GetObjectState是CoolObject上的一个函数,它返回某种对象状态。在这种情况下,我希望该函数简单地返回coolObject的内部状态对象。代码对象显然不会编译,因为在声明它之前你不能引用局部变量。
有解决方法吗?是否有类似于初始化器的“this”关键字?
答案 0 :(得分:3)
CoolObject coolObject = null;
coolObject = new CoolObject()
{
GetObjectState = () => coolObject.InternalState;
}
虽然如果coolObject的值在调用之前发生变化,这段代码就不安全了。
答案 1 :(得分:2)
你不能只删除{},即错误:
var coolObject = new CoolObject();
coolObject.GetObjectState = () => coolObject.InternalState;
答案 2 :(得分:1)
阐述我的评论:没有理由使用这种方法。将GetObjectState
定义为实际方法而不是Func<TypeOfInternalState>
,几乎肯定会更好:
public TypeOfInternalState GetObjectState() { return this.InternalState }
现在不需要编译器提升局部变量,也没有必要使用奇怪的构造语法来引用当前正在构造的对象的变量。
答案 3 :(得分:1)
怎么样:
public class CoolObject
{
public CoolObject()
{
GetObjectState = () => this.InternalState;
}
public Func<InternalState> GetObjectState;
}
您可以覆盖心脏的内容,默认状态适用于大多数情况。