带有自定义“抛出异常”辅助方法的“不是”运算符使变量未分配

问题描述 投票:0回答:1

假设我们有这样的代码:

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
方法,使其抛出异常吗?

c# exception pattern-matching throw
1个回答
0
投票

foo.Foo() 是问题所在...“foo”的作用域为“if 块”(通过“is”); foo.Foo() 在该范围“之外”。

© www.soinside.com 2019 - 2024. All rights reserved.