“0”과“1”을 거짓과 참으로 변환하는 방법


90

Odbc를 통해 데이터베이스에 연결하는 방법이 있습니다. 내가 호출하는 저장 프로 시저에는 데이터베이스 측에서 'Char'인 반환 값이 있습니다. 지금은 반환 값을 문자열로 잡고 간단한 if 문에서 사용하고 있습니다. 데이터베이스에서 0과 1이라는 두 개의 값만 반환 될 때 이와 같은 문자열을 비교한다는 생각이 정말 마음에 들지 않습니다.

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.
Earlz

11
사용하는 것이 좋습니다 return (returnValue!="0"). 그 더 자연스러운 것 0입니다 false및 0이 아닌 모든 숫자입니다 true. 물론 여기에서는 Chris가 숫자 대신 문자열을 사용하는 경우가
있으므로이 주석은

항상 논쟁입니다. 0은 ERROR_SUCCESS를 의미하며 모든 것이 잘되었음을 의미합니다. 그러나 나는 그것이 더 자연 스럽다는 Gacek에 동의합니다.
Pierre-Alain Vigeant 2010

3
널 (null)를 확인하는 것을 잊지 마십시오! string.IsNullOrEmpty을 (ReturnValue를) && (ReturnValue를 == "1")
csharpforevermore

2
Convert.ToBoolean (1)이 아닌 이유는 무엇입니까? 동일한 작업을 수행하며 확인을 위해 프레임 워크를 사용하고 있습니다. 위의 답변도 마음에 들지만 어느 것이 더 나은가요?
user20358 2014-10-09

105

한 줄의 코드에서 :

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

3
질문에서 언급했듯이 문자열을 비교하는 대신 부울을 사용할 수 있기 때문에 Chris 버전을 좋아합니다.
Svet

또한 의도를 더 명확하게 전달하기 때문에 귀하의 버전을 선호합니다.
BornToCode

"1"또는 "0"에만 적합합니다. 다른 문자열 반환 값은 예를 들어 "101"에 대한, 아니 결정적 사실이다 등등 ... 들어
szubajak

12

변환이 항상 성공하기를 원한다면 문자열을 변환하는 가장 좋은 방법 은 (Kevin처럼) "1"as 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.");
}

인식 할 수없는 값을 포착하는 것이 좋습니다. 내가 그렇게 가고 싶은지 확실하지 않지만 여전히 좋은 생각입니다.
Chris

5

반환 유형을 숫자로 설정-문자가 필요하지 않으므로 사용하지 마십시오. Convert.ToBoolean (num)을 사용하여 숫자 값 (0/1)을 변환 할 수 있습니다.

그렇지 않으면 : Kevin의 대답을 사용하십시오.


반환 유형을 변경할 수 있기를 바랍니다. 그러나 우리는 그것이 무엇인지에 집착합니다.
Chris

10
Convert.ToBoolean참 / 단지 참 / 거짓 / 허위 문자열을 받아
YARO

5

해당 양식을 사용할 수 있습니다.

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

또는 더 간단하게 (Jurijs Kastanovs에게 감사드립니다) :

return returnValue.Equals("1");

7
"? true : false"비트를 잃어 버리십시오. 완전히 불필요합니다. {return returnValue.Equals ( "1")}에 남겨주세요
Jurijs Kastanovs

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.