这是我的一段代码:
public class MyClass {
public object Value { get; set; }
public MyClass(object value) {
this.Value = value;
}
}
public class AnotherClass {
private static MyClass _MyObj = new MyClass(new object());
public static void Main(string[] args) {
var x = _MyObj; // no problem
var y = x.Value; // no problem
var z = y.ToString(); // Null ref exception
}
}
我不明白这是怎么回事。 _MyObj
不为null,这意味着内联赋值确实有效,但_MyObj.Value
出现null,这意味着没有调用构造函数代码!这里有一些黑魔法,我非常感谢你的解释。
谢谢!
编辑 - 抱歉没有复制品。我的实际代码(显然)比这更复杂,所以我试图将其愚蠢,显然在这个过程中我必须删除一些其他阻碍代码的正常功能。但Kobi's answer确实是我试图摆脱这个问题的 - 无论如何 - 所以回答他的信任。 :)
答案 0 :(得分:2)
初始化静态成员的正确方法是使用static constructor:
static AnotherClass(){
_MyObj = new MyClass(new object());
}
答案 1 :(得分:2)
状态:无重复。
提供的代码示例无法编译,public object Value { get; }
不是有效的自动属性。
用private set;
修复后,它编译并运行无错误。
答案 2 :(得分:1)
放置一个setter,它将按预期工作:
public object Value { get; set; }