簡體   English   中英

C#:如何聲明已檢查的 switch-expression-bodied function?

[英]C#: How to declare a checked switch-expression-bodied function?

我正在研究 C# (10.0/.NET6),我有一個問題。 有一段代碼:

Int32 x = Int32.MaxValue;
Int32 y = Int32.MaxValue;

try
{
  WriteLine($"{x} * {y} = {SomeFuncSwitch(x, y, 2)}");
  WriteLine($"{x} + {y} = {SomeFunc(x, y)}");
}
catch ( OverflowException ex )
{
  WriteLine( $"Overflow in {ex.TargetSite}!" );
}

static Int32 SomeFunc(Int32 x, Int32 y) => checked (x + y);

static Int32 SomeFuncSwitch(Int32 x, Int32 y, UInt16 condition) =>
checked (
  condition switch
  {
    1 => x + y,
    _ => x * y
  }
);

SomeFunc()會拋出異常,而SomeFuncSwitch()不會。 如果每個switch case 都被checked ,它就會。 有沒有(正確的)方法來使用 single checked

這似乎是使用帶有 switch 表達式的已checked表達式的結果。

如果你這樣做(通過checked塊),它會按預期工作:

static Int32 SomeFuncSwitch(Int32 x, Int32 y, UInt16 condition)
{
    checked
    {
        return condition switch
        {
            1 => x + y,
            _ => x * y
        };
    }
}

像你一樣,我希望原始代碼能夠工作。 代碼的生成方式可能存在一些錯誤。

它看起來確實像一個編譯器錯誤。 如果您查看反編譯的 C# 代碼,您會發現 SomeFuncSwitch() 中缺少已checked的表達式,但SomeFunc() SomeFuncSwitch()中並未缺少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM