gpt4 book ai didi

c# - 构造函数是否返回 null?

转载 作者:太空狗 更新时间:2023-10-30 00:41:43 26 4
gpt4 key购买 nike

我正在编写 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) 是多余的,因为构造函数总是返回 not null。不是吗?

最佳答案

在正常的正常代码中,构造函数不会返回 null . 有一些复杂的方法可以强制构造函数返回 null ,但它是如此奇怪的边缘情况,你永远不会看到它。出于所有意图和目的:new在这个对象上永远不会返回 null - 在 new() 之后添加空检查是完全没有意义的,尤其是像 StreamReader 这样明智的事情.

一个简单的例子,你可以得到空值:

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 { }

关于c# - 构造函数是否返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19026347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com