Assign to interface array initializator compiles but why?

前端 未结 4 990
星月不相逢
星月不相逢 2020-12-19 02:23

Today I was thinking it would be neat to make anonymous object which is type of some interface, and I have seen on SO that I am not only one.

Before I started checki

4条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-19 02:58

    Holder holder = new Holder { someInterface = { Property = 1 } };//<--Note you missed new keyword
    

    Above line is equal to

    Holder temp = new Holder();
    temp.someInterface.Property = 1;
    Holder holder = temp;// <--Here someInterface is null so you get null reference exception. 
    

    This should be something like

    Holder holder = new Holder { someInterface = new SomeClass(){ Property = 1 } };//<--Note the new keyword here
    

    Note: Your code never introduced "Anonymous Type" It is an "Object Initializer".

    When you use ObjectInitializer syntax with new keyword it means you're setting something, when you use ObjectInitializer syntax without new keyword it means you're reading something.

提交回复
热议问题