2012-01-17 35 views
9

thể trùng lặp:
Help converting type - cannot implicitly convert type 'string' to 'bool'thể không mặc nhiên chuyển đổi loại 'string' thành 'bool'

Tôi đã có mã này:

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; 
} 

và nhận được như sau lỗi:

thể không mặc nhiên chuyển đổi loại 'string' thành 'bool'

Không thể ngầm chuyển đổi loại 'string' thành 'đôi'

Không thể ngầm chuyển đổi loại 'string' thành 'int'

thể không mặc nhiên chuyển đổi gõ 'double' thành 'decimal'. Một chuyển đổi rõ ràng tồn tại (bạn có bỏ lỡ một dàn diễn viên không?)

Tôi biết điều đó có nghĩa là gì nhưng tôi không biết cách khắc phục.

+0

Xin chào, tại sao phiếu bầu xuống? – ivowiblo

+0

Bạn đã đọc bất kỳ hướng dẫn nào trước khi đăng câu hỏi chưa? –

+10

Tôi không nghĩ rằng câu hỏi này xứng đáng với nhiều downvotes.Giving ông chỉ dẫn sẽ hữu ích hơn nhiều. – Bastardo

Trả lời

17

Sử dụng phương pháp bool.Parse hoặc bool.TryParse để chuyển đổi giá trị chuỗi thành boolean.

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

Bạn không thể chuyển đổi "y" hay "n" giá trị boolean thay vì bạn phải nhận được giá trị như là một chuỗi và nếu nó là "y", sau đó lưu trữ true, false khác.

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

Hoặc (gợi ý của @ Mr-Hạnh phúc)

Food = answer == "y" 

Bạn cần phải xác định rõ ràng trong khi cast tính finalprice.

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

Bạn có thể muốn sử dụng 'Food = answer ==" y ";' mặc dù – dvdvorle

5

Bạn phải chuyển đổi những gì bạn đọc từ bảng điều khiển (là chuỗi) thành loại thực tế bằng cách sử dụng lớp tĩnh Chuyển đổi. Ví dụ:

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

Lỗi này nếu đối số không được chuyển đổi, nhưng đây không phải là vấn đề chính của bạn ngay bây giờ, vì vậy, hãy đơn giản.

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

Sử dụng tryparse là vô dụng nếu bạn không nắm bắt được kết quả. Làm thế nào để bạn biết một cái gì đó là sai? Hoặc sử dụng Parse cổ điển với ném một ngoại lệ, hoặc quấn tryparse với một lỗi 'if (! Tryparse (..)) xử lý ' –

+0

Thực sự nó sẽ tốt hơn khi bạn bắt lỗi nhưng ứng dụng sẽ không hoạt động và sử dụng giá trị mặc định cho double = 0, bool = false và int = 0. –

+0

Vì vậy, nó phụ thuộc vào yêu cầu nghiệp vụ ... nên chương trình thông báo cho người dùng rằng anh ta đã gõ sai? Tôi nghĩ câu trả lời là có. Câu trả lời phải là có. Ý kiến ​​của tôi là các lỗi im lặng nguy hiểm hơn (nó có thể dẫn đến các vấn đề sau này) hơn là một sự cố ứng dụng. –

0

Bạn phải quấn Console.ReadLine() cuộc gọi trong các chức năng phân tích cú pháp thích hợp, kể từ (không giống như PHP, ví dụ) C# là một ngôn ngữ đánh tĩnh, bổ sung chỉ chuyển đổi mà được đảm bảo để được cả hai an toàn và lossless có thể được thực hiện ngầm:

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()); 

và trong phương pháp tính toán của bạn, bạn phải chuyển đổi một cách rõ ràng kết quả đôi vào một số thập phân từ C# không hỗ trợ chuyển đổi ngầm giữa điểm cố định và giá trị dấu chấm động:

finalprice = (decimal)(Price * count); 
Các vấn đề liên quan