「0」と「1」をfalseとtrueに変換する方法


90

Odbcを介してデータベースに接続するメソッドがあります。私が呼び出しているストアドプロシージャには、データベース側からは「Char」である戻り値があります。現在、その戻り値を文字列として取得し、単純なifステートメントで使用しています。データベースから返される値が0と1の2つだけである場合に、このような文字列を比較するというアイデアは本当に好きではありません。

OdbcCommand fetchCommand = new OdbcCommand(storedProc, conn);

fetchCommand.CommandType = CommandType.StoredProcedure;
fetchCommand.Parameters.AddWithValue("@column ", myCustomParameter);
fetchCommand.Parameters.Add("@myReturnValue", OdbcType.Char, 1)
            .Direction = ParameterDirection.Output;
fetchCommand.ExecuteNonQuery();

string returnValue = fetchCommand.Parameters["@myReturnValue"].Value.ToString();
if (returnValue == "1")
{
    return true;
} 

この状況を処理する適切な方法は何でしょうか。明白な答えのように思われる「Convert.ToBoolean()」を試しましたが、「文字列が有効なブール値として認識されませんでした」に遭遇しました。'例外がスローされます。ここで何かが足りないのでしょうか、それとも「1」と「0」を真と偽のように動作させる別の方法がありますか?

ありがとう!

回答:


156

どうですか:

return (returnValue == "1");

または以下に提案されているように:

return (returnValue != "0");

正しいものはあなたが成功の結果として探しているものに依存します。


9
正しい?小切手; 簡潔ですか?小切手; エレガント?小切手。+1。
アールズ2010

11
の使用をお勧めしreturn (returnValue!="0")ます。それはより自然で0ありfalse、ゼロでないすべての数はtrueです。もちろん、ここでは、Chrisが数字の代わりに文字列を使用する場合があるため、このコメントは部分的にのみ有効です;)
Gacek 2010

それは常に議論です。0はERROR_SUCCESSも意味し、すべてがうまくいったことを意味します。しかし、私はそれがより自然であるというGacekに同意します。
Pierre-Alain Vigeant 2010

3
nullをチェックすることを忘れないでください:!string.IsNullOrEmpty(returnValue)&&(returnValue == "1")
csharpforevermore 2013

2
Convert.ToBoolean(1)を使用しないのはなぜですか?それは同じことをし、あなたはチェックのためにフレームワークを使用しています。上記の答えも好きですが、どちらを使用するのが良いですか?
user20358 2014年

105

1行のコードで:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))

3
質問で述べたように、文字列を比較する代わりにブール値を使用できるので、私はあなたのバージョンのクリスが好きです。
svet 2016年

意図をより明確に伝えるため、私もあなたのバージョンを好みます。
BornToCode 2018年

「1」または「0」にのみ有効です。他の文字列の戻り値は確定的ではないために、例えば、「101」は...真というようにである
szubajak

12

あなたは変換は常に成功したい場合は、おそらく文字列を変換するための最良の方法は、考えることであろう"1"ようtrueとし、他の何かfalse(ケビンが行うように)。"1"または"0"が返された場合に変換を失敗させたい場合は、次の方法で十分です(ヘルパーメソッドに入れることができます)。

if (returnValue == "1")
{
    return true;
}
else if (returnValue == "0")
{
    return false;
}
else
{
    throw new FormatException("The string is not a recognized as a valid boolean value.");
}

認識されていない値をキャッチするための素晴らしいアイデア。私がそのように行きたいかどうかはわかりませんが、それでも良い考えです。
クリス

5

戻り値の型を数値に設定します-文字は必要ありません(したがって、使用しないでください)。数値(0/1)は、Convert.ToBoolean(num)で変換できます。

それ以外の場合:ケビンの答えを使用してください


戻り値の型を変更できればと思います。しかし、私たちはそれが何であるかで立ち往生しています。
クリス

10
Convert.ToBooleanTrue / true / False / false文字列のみを受け入れます
Yaro 2013

4

次のフォームを使用できます。

return returnValue.Equals("1") ? true : false;

またはもっと簡単に(Jurijs Kastanovsに感謝します):

return returnValue.Equals("1");

7
「?true:false」ビットを失うだけです。それは完全に不要です。{return returnValue.Equals( "1")}の
ままにしてください

2

または、ブール値が返されない場合は、次のようにすることができます。

bool boolValue = (returnValue == "1");

1

私の解決策(vb.net):

Private Function ConvertToBoolean(p1 As Object) As Boolean
    If p1 Is Nothing Then Return False
    If IsDBNull(p1) Then Return False
    If p1.ToString = "1" Then Return True
    If p1.ToString.ToLower = "true" Then Return True
    Return False
End Function


-1

変換したくない場合。使用するだけです。

 bool _status = status == "1" ? true : false;

おそらく、必要に応じて値を返すでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.