C#这个初始化器真的多余吗?

JL.*_*JL. 2 c# resharper stylecop

我有以下代码行:

var dmrReceived = new DownloadMessagesReport();
Run Code Online (Sandbox Code Playgroud)

StyleCop和ReSharper建议我删除冗余初始化程序.但是,如果我用它替换它

DownloadMessagesReport dmrReceived;
Run Code Online (Sandbox Code Playgroud)

当然这会产生一个未设置为对象实例的对象引用?我使用的是.NET 3.5.你不再需要手动实例化对象吗?

下一行是:

dmrReceived = dc.DownloadNewMessages(param, param2, param3);
Run Code Online (Sandbox Code Playgroud)

值得注意的是,这dc是一个从WCF服务生成的类.所以DownloadNewMessages是一个WCF Web服务方法.

Dav*_*d M 12

如果它是一个字段,它将自动初始化为其默认值 - 对于引用类型为null.var但是,考虑到这一点,我猜它不是,而且你实际上是在你的代码中进一步实例化它,从而丢弃你在这里实例化的值.您不需要初始化声明它的变量.如果您想使用var它,但我建议您在实际首次使用它的地方声明它.


Han*_*ing 9

所以你的代码是

var dmrReceived = new DownloadMessagesReport();
dmrReceived = dc.DownloadNewMessages(param, param2, param3);
Run Code Online (Sandbox Code Playgroud)

第二行不会填充您在第一行中创建的对象,但它会完全替换该对象.因此不需要第一个赋值(因为第一个对象从未使用过),这就是R#警告的内容.