gpt4 book ai didi

引用类型中的 C# HasValue

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:19 25 4
gpt4 key购买 nike

是否有可能使用 Nullable<>.HasValue关于引用类型?

假设我们有这个来自值类型的例子:

int? a = GetNullOrValue(); // completely randomly gets random number or null
if (a.HasValue) return 0;

我想要完成的是:

class Foo 
{
public string Bar { get; set; }
}

Foo foo = GetNullOrFoo(); // completely randomly gets Foo ref. or null

if (foo.HasValue) return foo.Bar; // of course this will throw NullReferenceException if foo is null

我想实现这一点以获得更好的可读性,因为我更喜欢“文字内容”,而不是“符号内容”( x.HasValue 而不是 x != null )。

最佳答案

你可以写一个扩展方法。

public static class Extension
{
public static bool HasValue<T>(this T self) where T : class
{
return self != null;
}
}

然后就可以使用了

if (foo.HasValue()) return foo.Bar; 

但是,老实说,x != null 很简单,这种扩展方法会让维护者感到困惑,我不会推荐它。

如果您打算使用这种方法,另请进一步阅读。这仅在没有名为 HasValue 的实例方法时有效,如果有任何实例方法将被调用,而不是扩展方法。因此它将导致 NullReferenceException。不要对结果感到惊讶。因此,在执行此操作之前请三思。


Always code as if the person who ends up maintaining your code is aviolent psychopath who knows where you live.

引自 Code For The Maintainer

关于引用类型中的 C# HasValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23949807/

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