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