【发布时间】:2026-01-09 12:15:01
【问题描述】:
如果我有一个可以为 null 的值类型,我总是必须使用它的 Value 属性,即使在我检查了它是否为 null 之后也是如此。有没有一种简洁的方法?
public void Foo(SomeStruct? s)
{
if (s != null)
{
DoIt(s.Value.x + s.Value.y + s.Value.z);
}
}
显而易见的方法是定义一个新变量,这使得它影响的每个变量的代码更长,并且我发现这使得代码更难阅读:
if (s != null)
{
var sv = s.Value;
DoIt(sv.x + sv.y + sv.z);
}
我想到的另一件事是模式匹配,但这有运行时类型检查的缺点:
if (s is SomeStruct sv)
{
DoIt(sv.x + sv.y + sv.z);
}
我是否忽略了某些东西(除了我可能应该首先避免空变量的事实)?
【问题讨论】:
标签: c# struct pattern-matching nullable c#-8.0