今天我在想,做一些接口类型的匿名对象是一件很好的工作,而我在SO上看到,我不仅仅是一个.
在我开始查看发生了什么之前,我写了一些如下所示的代码.
对于我的娱乐,它编译,我使用.net框架4,我知道没有办法做匿名对象实现接口,但我没有看到VS的这个代码的抱怨.
更好的是,当我把大括号intelisense找到我的界面的“属性”,就像这将是有效的代码.
为什么这个程序是编译的,当它运行时给出null引用异常?
namespace test { class Program { static void Main(string[] args) { Holder holder = new Holder { someInterface = { Property = 1 } }; Console.WriteLine(holder.someInterface.Property); } } class Holder { public ISomeInterface someInterface{get; set;} } interface ISomeInterface { int Property { get; set; } } }
解决方法
Holder holder = new Holder { someInterface = { Property = 1 } };//<--Note you missed new keyword
上线等于
Holder temp = new Holder(); temp.someInterface.Property = 1; Holder holder = temp;// <--Here someInterface is null so you get null reference exception.
这应该是这样的
Holder holder = new Holder { someInterface = new SomeClass(){ Property = 1 } };//<--Note the new keyword here
注意:您的代码从未引入“匿名类型”它是一个“对象初始化程序”.
当您使用Objectinitializer语法与新关键字时,这意味着您正在设置某些东西,当您使用Objectinitializer语法没有新的关键字,这意味着您正在阅读的东西.
原文地址:https://www.jb51.cc/csharp/96182.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。