none
整数値をbool型にキャストするには RRS feed

  • 質問

  • 次の様なキャストってコンパイルエラーになります。

     

    int i = 0;

    bool b = (bool)i;

     

    Convert.ToBoolean()でしか整数値をbool型にキャストできないのでしょうか?

     

    基本的な事ですが、ご教授願えませんでしょうか。

    宜しくお願い致します。

     

    2008年3月7日 7:54

回答

  • C#のリファレンスに
    「C# では、bool 型とその他の型は変換できません。」
    と書かれているのでキャストはムリでしょう。
    http://msdn2.microsoft.com/ja-jp/library/c8f5xwh7.aspx


    三項演算子を使ってみては?
    bool b = ( i == 0 ) ? true : false;

    2008年3月7日 8:11
  • 外池です。C#の仕様書によれば、ご希望のような操作は「出来ない」と明示的に書いてありますね。で、解決策(にもならないのですが・・・)は、整数値をゼロと等しいか、等しくないかを、比較式で明示的に書き下すしかありません。なぜ、そのような仕様になっているかと言えば・・・、整数値のどの値をTrueとし、どの値をFalseとするかについて、「まず、間違いない、標準的な解釈」というものが無い、というのが理由のようです。

    2008年3月7日 8:16

すべての返信

  • キャストではないですが、

     

    bool b = (i != 0);

     

    ではダメ?

    2008年3月7日 8:06
  • C#のリファレンスに
    「C# では、bool 型とその他の型は変換できません。」
    と書かれているのでキャストはムリでしょう。
    http://msdn2.microsoft.com/ja-jp/library/c8f5xwh7.aspx


    三項演算子を使ってみては?
    bool b = ( i == 0 ) ? true : false;

    2008年3月7日 8:11
  • 外池です。C#の仕様書によれば、ご希望のような操作は「出来ない」と明示的に書いてありますね。で、解決策(にもならないのですが・・・)は、整数値をゼロと等しいか、等しくないかを、比較式で明示的に書き下すしかありません。なぜ、そのような仕様になっているかと言えば・・・、整数値のどの値をTrueとし、どの値をFalseとするかについて、「まず、間違いない、標準的な解釈」というものが無い、というのが理由のようです。

    2008年3月7日 8:16
  • 蒼の洞窟さん、ぼーずさん、外池さん、回答ありがとうございます。

     

    >「C# では、bool 型とその他の型は変換できません。」

    と、明言されているのであれば、どうしようもないですね。

     

    個人的に、キャストする際、「(int)」の様に型を指定で変換したり、「as」を使う事が

    多かったので、今回も「(bool)」でキャストする事を試みたところコンパイルエラーに

    なった、というのが経緯でして。

     

    別段、Convertクラスが使えないとか、ダメという訳ではないので、今回の様に

    bool型にキャストするのは、素直にConvertクラスを使用します。

     

    皆様、ありがとうございました。

     

    2008年3月7日 8:28
  • Convertクラスよりは・・・、蒼の洞窟さんのご提案の方法が、ずっと良いと思います。

     

    老婆心ながら・・・。

     

    たぶん、ずっと速い。あと、何をもってFalseなのかTrueなのか、一目瞭然。

     

    2008年3月7日 8:50