"0" और "1" को झूठे और सच्चे में कैसे बदलें


90

मेरे पास एक विधि है जो ओडीबीसी के माध्यम से एक डेटाबेस से जुड़ रही है। संग्रहीत प्रक्रिया जिसे मैं कॉल कर रहा हूं उसका रिटर्न मान है जो डेटाबेस की ओर से एक 'चार' है। अभी मैं उस वापसी मान को एक स्ट्रिंग के रूप में ले रहा हूं और एक साधारण यदि कथन में इसका उपयोग कर रहा हूं। मुझे वास्तव में इस तरह से एक स्ट्रिंग की तुलना करने का विचार पसंद नहीं है जब केवल दो मान डेटाबेस, 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' बनाने का एक और तरीका है, जैसे कि सच्चा और झूठा?

धन्यवाद!

जवाबों:


155

कैसा रहेगा:

return (returnValue == "1");

या नीचे दिए गए सुझाव के अनुसार:

return (returnValue != "0");

सही परिणाम इस बात पर निर्भर करेगा कि आप सफलता के परिणाम के रूप में क्या देख रहे हैं।


9
सही बात? जाँच; संक्षिप्त? जाँच; सुरुचिपूर्ण? जाँच। +1।
18

11
मैं उपयोग करने की सलाह दूंगा return (returnValue!="0")। यह अधिक स्वाभाविक 0है falseऔर यह है कि हर संख्या शून्य नहीं है true। यहाँ निश्चित रूप से हमारे पास ऐसा मामला है जहाँ क्रिस संख्याओं के बजाय तार का उपयोग करता है, इसलिए यह टिप्पणी केवल आंशिक रूप से मान्य है;)
गेसक

यह हमेशा एक बहस है। 0 का अर्थ ERROR_SUCCESS से भी है जिसका अर्थ है कि सब कुछ ठीक हुआ। लेकिन मैं गेसक से सहमत हूं कि यह अधिक स्वाभाविक है।
पियरे-एलेन विगेंट

3
मत भूलना nulls के लिए जाँच करने के लिए: string.IsNullOrEmpty (returnValue) && (returnValue == "1")
csharpforevermore

2
क्यों नहीं कन्वर्ट। बूलियन (1)? यह वही करता है और आप चेक के लिए ढांचे का उपयोग कर रहे हैं। मैं ऊपर दिए गए उत्तर को पसंद करता हूं, लेकिन कौन सा उपयोग करना बेहतर है?
user20358

105

कोड की एक पंक्ति में:

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

3
मुझे आपका संस्करण क्रिस पसंद है क्योंकि जैसा कि कहा गया है, स्ट्रिंग्स की तुलना करने के बजाय बूलियन का उपयोग करने देता है।
Svet

मैं आपके संस्करण को भी पसंद करता हूं क्योंकि यह आशय को अधिक स्पष्ट रूप से व्यक्त करता है।
बॉर्नटूकोड

यह केवल "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 (संख्या) के साथ परिवर्तित किया जा सकता है

अन्यथा: केविन के जवाब का उपयोग करें


मेरी इच्छा है कि हम रिटर्न प्रकार बदल सकते हैं। लेकिन हम इसके साथ फंस गए हैं।
क्रिस

10
Convert.ToBooleanकेवल सत्य / सत्य / असत्य / गलत तार को स्वीकार करता है
यारो

4

आप उस फॉर्म का उपयोग कर सकते हैं:

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

या अधिक बस (जुरीज कस्तानोव्स के लिए धन्यवाद):

return returnValue.Equals("1");

7
बस "खो दो? सच: झूठ" बिट। यह पूरी तरह से अनावश्यक है। यह {वापसी 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;

शायद आप मूल्यों को वापस कर देंगे जैसा आप चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.