【问题标题】:what does "an object reference is required for the non-static field, method, or property 'Random.Next(int, int)' mean? [duplicate]“非静态字段,方法或属性'Random.Next(int,int)'需要对象引用是什么意思? [重复]
【发布时间】:2015-10-28 01:40:24
【问题描述】:

我遇到的问题是 Visual Studio 在代码“Random.Next(1,10);”下抛出错误说:

"非静态字段、方法或 属性 'Random.Next(int, int)' "

所以,我用类似的短语查看了其他问题的答案。在 Stack Overflow 上的这些示例中,大多数建议说有人需要简单地将方法或类设为静态。我在这段代码中尝试了所有这些组合,但它没有修复 Visual Studio 中的错误。

感谢您的帮助。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Data_Collector_Course_Assignment
{
    public class Device
    {
        // Returns a randoom integer between 1 and 10 as a measurement of an 
           imaginary object

        public int GetMeasurement()
        {
            int randomInt = Random.Next(1,10);
            return randomInt;
        }
    }
}

【问题讨论】:

  • Linked duplicate 和 MSDN 提供了 2 个选项:“您需要将属性设为静态,或者创建一个实例”。由于您无法更改 Random 的实现,您可以放心地忽略所有“制作静态”建议。

标签: c# random


【解决方案1】:

这意味着Next 是一个实例方法(不是static)。您需要一个 Random 的实例才能使用它:

public int GetMeasurement()
{
    Random rand = new Random();
    int randomInt = rand.Next(1,10);
    return randomInt;
}

或者,更短:

public int GetMeasurement()
{        
    int randomInt = new Random().Next(1,10);
    return randomInt;
}

【讨论】:

  • 你不应该每次都创建一个 Random 实例;如果被快速连续调用;你会得到几个具有相同种子的实例,因此产生相同的数字
  • 是的,但远远超出了这个问题的范围
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多