2012-01-16 19 views
7

Tôi đang viết chương trình Thủ trưởng hoặc Tails nhỏ bằng cách sử dụng chức năng Ngẫu nhiên và nhận Không thể truyền đối tượng thuộc loại 'System.Random' để nhập Thông báo 'System.IConvertible' và không chắc chắn tại sao. Ai đó có thể làm sáng một chút. Cảm ơn.Không thể truyền đối tượng thuộc loại 'System.Random' để nhập 'System.IConvertible'

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Random rNum = new Random(); 
    rNum.Next(2, 47); 


    int rrNum = Convert.ToInt32(rNum); 

    string result; 
    result = (rrNum % 2 == 0) ? "Heads" : "Tails"; 
    lblResult.Text = result; 

} 
+1

Một lời khuyên cho tương lai: bất cứ khi nào bạn nhận được thông báo lỗi trong C#, hãy kiểm tra dòng xảy ra, đảm bảo bạn có đúng loại thông số/loại biến, v.v. –

Trả lời

7

Next trên ngẫu nhiên lợi nhuận một số nguyên. Vì vậy, mã chính xác là:

Random rNum = new Random(); 
int rrNum = rNum.Next(2, 47); 

Vì vậy, từ đó không cần phải chuyển đổi rNum thành số nguyên.

Random rNum = new Random(); 
int rrNum = rNum.Next(2, 47); 
string result = (rrNum % 2 == 0) ? "Heads" : "Tails"; 
lblResult.Text = result; 
+0

+1 Câu trả lời duy nhất thực sự _xem_ ở ngữ cảnh của mã. Có vẻ như thực sự không chắc rằng OP thực sự có ý định chuyển đổi một đối tượng kiểu Random;) – Abel

+0

Cảm ơn đã làm việc. – NewUser101

1

Đó là bởi vì Convert.ToIn32() nhu cầu của đối tượng thông qua thực hiện IConvertible.

Để lấy một số ngẫu nhiên, bạn cần phải gọi phương thức Random.Next(), như vậy:

Random rNum = new Random(); 
int YourRandomNumber = rNum.Next(2, 47); 
-2

Đúng như các bang thông báo lỗi, bạn không thể chuyển đổi một thể hiện của System.Random để trong trường hợp này một Int .

0

Bạn phải gán giá trị trả về từ rNum.Next(2,47) cho một biến như sau:

int rrNum = rNum.Next(2,47); 

rNum là loại Random. Bạn không thể chuyển đổi loại đó thành int.

rNum.Next(2,47) trả lại int mà bạn muốn. Nếu bạn nhìn vào các tài liệu cho Random.Next bạn sẽ thấy rằng chữ ký kiểu của nó là:

public virtual int Next(int minValue, int maxValue); 

Các int trong public virtual int là kiểu trả về của phương pháp. Bạn có thể sử dụng thông tin này để xác định loại biến nào bạn cần để lưu trữ những gì được trả về từ cuộc gọi đến Next.

Các vấn đề liên quan