构造函数是否返回空值
本文关键字:空值 返回 是否 构造函数 | 更新日期: 2023-09-27 18:32:56
我正在编写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
。有一些复杂的方法可以强制构造函数返回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 { }
根据ReSharper:
if (resourceReader != null)
表达永远是真实的
那是因为StreamReader
构造函数永远不会返回null
。事实上,我想不出构造函数会在我脑海中返回null
的任何时间。
Readline
或其他方法可以返回null,但streamreader
不会。因为您在创建实例的同时分配实例。所以检查是没有用的。
构造函数返回其类引用。 并且它不为空。
构造
函数不应将 null 值返回到 Everywhere 和 On EveryTime