我正在编写C#程序,而VisualStudio的VSTO向导会生成以下代码。
private static string GetResourceText(string resourceName)
{
Assembly asm = Assembly.GetExecutingAssembly();
string[] resourceNames = asm.GetManifestResourceNames();
for (int i = 0; i < resourceNames.Length; ++i)
{
if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0)
{
using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i])))
{
if (resourceReader != null)
{
return resourceReader.ReadToEnd();
}
}
}
}
return null;
}
我认为if (resourceReader != null)
是多余的,因为构造函数总是返回非null。不是吗?
答案 0 :(得分:6)
在常规的理智代码中,构造函数不会返回null
。 是一些错综复杂的方法,你可以强制一个构造函数返回null
,但它是一个奇怪的边缘情况,你永远不会看到它。对于所有意图和目的:此对象上的new
永远不会返回null
- 在new()
之后添加空检查是完全没有意义的,特别是对于像{{1 }}
一个简单的情况,你可以得到null:
StreamReader
但这只是暴露了可空类型的微妙拳击行为。获取构造函数以返回object obj = new int?()
的复杂方法越多,需要恶意:
null
答案 1 :(得分:1)
根据ReSharper的说法:
if (resourceReader != null)
表达始终是真的
那是因为StreamReader
构造函数永远不会返回null
。事实上,我无法想象任何时候,构造函数永远返回null
。
答案 2 :(得分:0)
Readline
或其他方法可以返回null但streamreader
赢了。因为您在创建实例的同时分配实例。所以检查是没用的。
答案 3 :(得分:0)
构造函数返回它们的类引用。它不是空的。
答案 4 :(得分:0)
构造函数不应该将空值返回到任何地方和每个时间