构造函数是否返回null?

时间:2013-09-26 10:58:23

标签: c#

我正在编写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。不是吗?

5 个答案:

答案 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)

构造函数不应该将空值返回到任何地方和每个时间