unity - true string to boolean c#




C#はboolをintにキャストできません (6)

Convert.ToInt32を使用できます。その定義はここにあります:

public static int ToInt32(bool value);

私たちは皆、C#ではboolをintにキャストできないことを知っています。 私はビットマスクを使って真のバイナリ表現を見たいと思っていましたが、(bool&int)を使用することはできません。問題はアーキテクチャの欲求であると思います。 "真は真であり、数字ではありません!= 0"(C ++)このようなアーキテクチャのメリットが何か不思議でした。 C true / falseのコンセプトには何が悪いですか?


Cでは、整数は通常の数とブール値として二重に使用されることがよくあります。たとえば、ある数がゼロでないときに実行されるループの場合です。 これは、ナイーブなstrlenルーチンのように、簡潔なコードのメリットがあることは明らかです。

const char *s;
for (s = str; *s; ++s)
    ;
return (s - str);

短い間、それは本質的に「私が見ている文字がヌル文字ではない間にループする」というそのスニペットの真の目的を隠している。 しかし、書き留めておけば、「それが気に入ったらブール値として扱い、他の場合は数値として扱う」と書かれています。

このような二重の性質はしばしば問題につながり、コードの読みやすさが低下します( int指定された使い方がintboolかをコンテキストから判断する必要があるため)。

ブール値を整数として絶対に使用する必要がある場合は、

Convert.ToInt32(someBool)

Noldorinが言いました

someBool ? 1 : 0

どちらも明白にあなたがintを使っていると言っています( boolありません)。


int n =(bBool)? 1:0


number!= 0、エラーが発生しやすいです。

C#はこのような一般的な間違いを覆すために多くの設計上の決定を下しました。


あなたはこれらについて良い点を作っています。 ただし、1つのショートカットは削除されます。

cでは、 "bBool = 1 - bBool"というコードで簡単に切り替えることができます。

bBoolがtrue(1)の場合、1 - 1 = 0です.bBoolはfalseに変わります。

bBoolがfalse(0)の場合、1 - 0 = 1です.bBoolはtrueに変わります。

代わりにC#では状態をチェックするために条件を実行する必要があり、それを逆に設定するとマシンと私の作業が増えます。


情報のために、 Convert.ToInt32(fooBool)は、 trueが1で表され、 falseで0であることを伝えるべきです(これはBCLの任意の表現ですが、必ずしもメモリを使用するとは限りません)。

ここでのポイントは、ビット表現は本当にどのプログラマにとっても無意味であるべきだということです。 ブール値は特定の目的(フラグなど)に使用するためのものであり、intと混同しないようにしてください。そうしないと、変数の使用がかなり混乱する可能性があります。







.net