假设我们有这样的代码:
if (obj is not IFoo foo)
{
throw new ArgumentException("Can't do that!");
}
foo.Foo();
按预期工作:
foo
未在if
上下文中分配,而是在之后分配。
但是,如果我想为内联和可读性目的创建一个抛出助手 - 它会停止工作。
if (obj is not IFoo foo)
{
ThrowHelper.ThrowArgumentException("Can't do that!");
}
foo.Foo(); // CS0165
我明白为什么,编译器不知道
ThrowHelper
方法会抛出异常,因此它认为我们可以进一步了解 foo,而 is not
模式不允许。
问题:有什么办法可以摆脱这种情况吗?我明白,我可以反转 if,但我很好奇:我可以为编译器“标记”
ThrowHelper
方法,使其抛出异常吗?
foo.Foo() 是问题所在...“foo”的作用域为“if 块”(通过“is”); foo.Foo() 在该范围“之外”。