1. ホーム
  2. c#

[解決済み] C# で System.Object を `bool` に安全にキャストするにはどうしたらいいですか?

2023-08-21 21:24:01

質問

を抽出しています。 bool の値を抽出しています。

as 演算子は参照型に対してのみ使用できます。 as へのセーフキャストを試みるために bool :

// This does not work: "The as operator must be used with a reference type ('bool' is a value type)"
object rawValue = map.GetValue(key);
bool value = rawValue as bool;

が発生することなく、オブジェクトを安全に値型にキャストできるような、似たようなことはないでしょうか? InvalidCastException の可能性なしにオブジェクトを値型に安全にキャストすることはできますか?

どのように解決するのですか?

2つの選択肢があります...少し驚くような性能です。

  • 冗長なチェック。

    if (rawValue is bool)
    {
        bool x = (bool) rawValue;
        ...
    }
    
    
  • null可能な型を使用する。

    bool? x = rawValue as bool?;
    if (x != null)
    {
        ... // use x.Value
    }
    
    

驚くべきは のパフォーマンスが、最初の .

C# 7では、このためにパターンマッチを使用することができます。

if (rawValue is bool value)
{
    // Use value here
}

なお、最終的には value の後に、スコープ内の(しかし確実に割り当てられているわけではない) if ステートメントの後に