C# 构造函数是否返回null?

C# 构造函数是否返回null?,c#,C#,我正在编写C#程序,VisualStudio的VSTO向导生成以下代码 私有静态字符串GetResourceText(字符串resourceName) { Assembly asm=Assembly.getExecutionGassembly(); 字符串[]resourceNames=asm.GetManifestResourceNames(); for(int i=0;i

我正在编写C#程序,VisualStudio的VSTO向导生成以下代码

私有静态字符串GetResourceText(字符串resourceName)
{
Assembly asm=Assembly.getExecutionGassembly();
字符串[]resourceNames=asm.GetManifestResourceNames();
for(int i=0;i

我认为,
if(resourceReader!=null)
是多余的,因为构造函数总是返回NOTNULL。不是吗?

Readline
或其他方法可以返回null,但
streamreader
不会。因为您正在创建实例的同时分配实例。因此,检查是无用的。

根据ReSharper:

if (resourceReader != null)
表达总是真实的


这是因为
StreamReader
构造函数将永远不会返回
null
。事实上,我想不出有哪一次构造函数会返回
null

在正常的正常代码中,构造函数不会返回
null
。有一些复杂的方法可以强制构造函数返回
null
,但这是一种非常奇怪的边缘情况,你永远看不到它。出于所有意图和目的:
new
在这个对象上永远不会返回
null
——在
new()
之后添加null检查是完全没有意义的,特别是对于像
StreamReader
这样的合理的东西

一个可以获取null的简单情况:

object obj = new int?()
但这只是暴露了可空类型的微妙装箱行为。让构造函数返回
null
的更复杂方法需要:

static void Main() {
    var obj = new MyFunnyType(); // wow! null!
}

class MyFunnyProxyAttribute : ProxyAttribute {
    public override MarshalByRefObject CreateInstance(Type serverType) {
        return null;
    }
}
[MyFunnyProxy]
class MyFunnyType : ContextBoundObject { }

构造函数返回它们的类引用。它不是空的。

构造函数不应该在任何地方和任何时候都返回空值

这是正确的,
resourceReader
在这个实例中永远不能为空-它要么抛出异常,要么返回
StreamReader
我不确定我是否会依赖R#,它的启发法有时是错误的。@svick 99/100它们通常是正确的。事实上,它是可以做到的——即使对于类;我将把它编辑到我的示例中,但这纯粹是为了curiosity@MarcGravell是的,我想一定有办法,这就是为什么我说我想不出时间。很好地找到了一个:)你错过了一个指令:
使用System.Evil