【问题标题】:Unable to cast object of type 'System.Random' to type 'System.IConvertible'无法将“System.Random”类型的对象转换为“System.IConvertible”类型
【发布时间】:2012-01-16 23:28:34
【问题描述】:

我正在使用 Random 函数编写一个小的 Heads 或 Tails 程序,并收到无法将“System.Random”类型的对象转换为“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;

}

【问题讨论】:

  • 对未来的一条建议:每当您在 C# 中收到错误消息时,请检查它发生的行,确保您具有正确的参数类型/变量类型等,检查内部异常.

标签: c# .net


【解决方案1】:

Next 随机返回一个整数。所以正确的代码是:

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

因此,无需将rNum 转换为整数。

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

【讨论】:

  • +1 实际上查看代码上下文的唯一答案。 OP 似乎不太可能真的打算转换 Random 类型的对象;)
【解决方案2】:

那是因为Convert.ToIn32() 要求传递的对象实现IConvertible

要检索一个随机数,你需要调用Random.Next()方法,像这样:

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

【讨论】:

    【解决方案3】:

    您必须将 rNum.Next(2,47) 返回的值分配给一个变量,如下所示:

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

    rNum 的类型为 Random。您不能将该类型转换为int

    rNum.Next(2,47) 返回您想要的 int。如果您查看Random.Next 的文档,您会看到它的类型签名是:

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

    public virtual int 中的int 是方法的返回类型。您可以使用此信息来确定需要什么类型的变量来存储调用 Next 时返回的内容。

    【讨论】:

      【解决方案4】:

      正如错误消息所述,在这种情况下,您不能将 System.Random 的实例转换为 Int。

      【讨论】:

        猜你喜欢
        • 2015-12-17
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多