2012-01-17 12 views
9

संभव डुप्लिकेट:
Help converting type - cannot implicitly convert type 'string' to 'bool'परोक्ष 'bool' के लिए प्रकार 'स्ट्रिंग' कनवर्ट नहीं कर सकता

मैं इस कोड मिल गया है:

private double Price; 
private bool Food; 
private int count; 
private decimal finalprice; 

public void Readinput() 
{ 
    Console.Write("Unit price: "); 
    Price = Console.ReadLine(); 

    Console.Write("Food item y/n: "); 
    Food = Console.ReadLine(); 

    Console.Write("Count: "); 
    count = Console.ReadLine(); 
} 

private void calculateValues() 
{ 
    finalprice = Price * count; 
} 

और मिल निम्नलिखित त्रुटियां:

परोक्ष 'bool' के लिए प्रकार 'स्ट्रिंग' कनवर्ट नहीं कर सकता

परोक्ष 'डबल' के लिए कनवर्ट नहीं कर सकता प्रकार 'स्ट्रिंग'

परोक्ष 'int' के लिए प्रकार 'स्ट्रिंग' कनवर्ट नहीं कर सकता

परोक्ष कनवर्ट नहीं कर सकता 'दशमलव' से 'दशमलव' टाइप करें। एक स्पष्ट रूपांतरण मौजूद है (क्या आप एक कलाकार गायब हैं?)

मुझे पता है इसका क्या अर्थ है लेकिन मुझे नहीं पता कि इसे कैसे ठीक किया जाए।

+0

अरे, वोट क्यों नीचे? – ivowiblo

+0

क्या आपने प्रश्न पोस्ट करने से पहले कोई ट्यूटोरियल पढ़ा था? –

+10

मुझे नहीं लगता कि यह प्रश्न कई डाउनवॉट्स के योग्य है। उसे निर्देश देना बहुत उपयोगी होगा। – Bastardo

उत्तर

17

स्ट्रिंग मान को boolean में परिवर्तित करने के लिए bool.Parse या bool.TryParse विधि का उपयोग करें।

Price = double.Parse(Console.ReadLine()); 
Food =bool.Parse(Console.ReadLine()); 
count = int.Parse(Console.ReadLine()); 

आप "y" या "n" के बजाय बूलियन करने के लिए अपने एक स्ट्रिंग के रूप मूल्य प्राप्त करने के लिए है और अगर यह "y" है तो true, false स्टोर अन्यथा मूल्य परिवर्तित नहीं कर सकते।

Console.Write("Food item y/n: "); 
string answer = Console.ReadLine(); 
if(answer=="y") 
    Food=true; 
else 
    Food=false; 

या (के @ श्री-मुबारक सुझाव)

Food = answer == "y" 

आप finalprice की गणना करते समय स्पष्ट डाली निर्दिष्ट करने के लिए की जरूरत है।

private void calculateValues() 
{ 
    // convert double result into decimal. 
    finalprice =(decimal) Price * count; 
} 
+1

शायद आप 'खाद्य = उत्तर == "वाई' का उपयोग करना चाहते हैं;' – dvdvorle

5

आपको स्थिर वर्ग कनवर्ट का उपयोग करके वास्तविक प्रकार के कंसोल (जो एक स्ट्रिंग है) से जो कुछ आप पढ़ते हैं उसे परिवर्तित करना होगा। उदाहरण के लिए:

Console.Write("Count: "); 
count = Convert.ToInt32(Console.ReadLine()); 

यह दुर्घटनाओं अगर तर्क दिया परिवर्तित नहीं किया जा सकता है, लेकिन इसे अपनी प्राथमिक समस्या अभी नहीं है, इसलिए इसे सरल रखने दें।

1
Console.Write("Unit price: "); 
double.TryParse(Console.ReadLine(), out Price); 

Console.Write("Food item y/n: "); 
bool.TryParse(Console.ReadLine(), out Food); 

Console.Write("Count: "); 
int.TryParse(Console.ReadLine(), out count); 
0
private double Price; 
private bool Food; 
private int count; 
private decimal finalprice; 

public void Readinput() 
{ 
    Console.Write("Unit price: "); 
    double.TryParse(Console.ReadLine(), out Price); 

    Console.Write("Food item y/n: "); 
    bool.TryParse(Console.ReadLine(), out Food); 

    Console.Write("Count: "); 
    int.TryParse(Console.ReadLine(), out count); 
} 

private void calculateValues() 
{ 
    finalprice = Price * count; 
} 
+1

यदि आप परिणाम नहीं प्राप्त करते हैं तो tryparse का उपयोग बेकार है। आप कैसे जानते हैं कि कुछ गलत है? या तो अपवाद के फेंक के साथ क्लासिक पार्स का उपयोग करें, या 'if (! Tryparse (..)) त्रुटि हैंडलिंग' –

+0

के साथ tryparse को लपेटें, वास्तव में यह बेहतर होगा जब आप त्रुटियों को पकड़ लें लेकिन एप्लिकेशन क्रैश और उपयोग को नोग करेगा डबल = 0, बूल = झूठी और int = 0. –

+0

के लिए डिफ़ॉल्ट मान तो यह व्यवसाय की आवश्यकता पर निर्भर करता है ... क्या प्रोग्राम को उपयोगकर्ता को कुछ गलत टाइप करने के बारे में सूचित करना चाहिए? मुझे लगता है कि जवाब हां है। जवाब हाँ होना चाहिए। मेरी राय यह है कि एक आवेदन दुर्घटना की तुलना में चुप त्रुटियां अधिक खतरनाक हैं (इससे बाद में समस्याएं हो सकती हैं)। –

0

आप उचित पार्सर कार्यों में Console.ReadLine() कॉल रैप करने के लिए किये जा चुके है (PHP के विपरीत, उदाहरण के लिए) सी # एक स्थिर टाइप भाषा है, इसके साथ ही केवल रूपांतरण जो गारंटी है दोनों सुरक्षित और दोषरहित होने के लिए परोक्ष किया जा सकता है:

Price = double.Parse(Console.ReadLine()); 

Console.Write("Food item y/n: "); 
// I think you want the user to type in "y", "Y", "n" or "N", right? 
Food = Console.ReadLine().ToUpper() == "Y"; 

Console.Write("Count: "); 
count = int.Parse(Console.ReadLine()); 

और अपने गणना पद्धति में, आप स्पष्ट रूप से एक दशमलव में डबल जिसके परिणामस्वरूप कन्वर्ट करने के लिए के बाद से सी # निश्चित बिंदु और चल बिन्दु मूल्यों के बीच निहित रूपांतरण का समर्थन नहीं करता है:

+०१२३५१६४१०६
finalprice = (decimal)(Price * count); 
संबंधित मुद्दे