C#では、ほとんどの言語のように、正規ブール値はNULL値に設定できません。しかし、あなたは望む結果を得るためにnullable typesを使うことができます。
public bool? MyMethod()
{
// Stuff
}
お知らせbool
後?
:あなたは方法がtrue
、false
、またはnull
を返すことができるようにしたい場合は、それは戻り値の型だとして、あなたがNULL可能ブール値を指定たとえば
、。これは、ブール値ががNULL可能であることを指定します。です。あなたが行うことができ、あなたの場合はそう
:
public bool? GetBoolSetting(Settings setting)
{
string myString = GetStringSetting(setting));
if (string.IsNullOrEmpty(myString))
return null;
return int.Parse(myString) != 0;
}
がしかし、NULL可能boolsのようなタイプでの作業はトリッキーで助言されます。たとえば、このメソッドの結果をboolパラメータを取る別のメソッドに渡そうとすると、すぐには使用できなくなります。
public void MyBoolMethod(bool parameter)
{
}
MyBoolMethod(MyMethod()); // This doesn't compile
あなたは後の進路、それはない nullであることを確認し、通常のものにあなたのNULL可能ブール値をキャストする必要があります。
MyBoolMethod((bool)MyMethod());
..or代わりに、デフォルト値を決定この場合(bool?
は、他の場所で使用できるようにnullであればどうなるか)、変換してください。デフォルトとしてfalse
と
例:
bool newBool = MyMethod() ?? false;
あなたの質問にはほとんど関係を持っているが、私はあなたがお勧めアドバイスの余分な部分、。代わりに、指定した文字列が有効でない場合、例外をスローし、安全でないint.Parse
、の、Int32.TryParse
に切り替える:int.Parse
はnull
入力を処理できないため
public bool? GetBoolSetting(Settings setting)
{
string myString = GetStringSetting(setting));
int output = -1;
if (string.IsNullOrEmpty(myString) || !int.TryParse(myString, out output))
return null;
return output != 0;
}
は、あなたが本当にそれがnullを返すようにしたいですか?これによって上流のすべてのものが影響を受けると考えてください。 'GetStringSetting()'の結果がnullの場合、falseを返すほうが理にかなっていませんか? – maccettura