2010-03-03 59 views
1

我想从一个方法返回一个随机数,但显然隐式类型不正确。它说: “无法隐式转换类型 'Randomize.RandomNumber' 到 '廉政'”返回一个随机数类型问题

RandomNumber.cs:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace Randomizer 
{ 
    class RandomNumber 
    { 
     public int RandomInRange(int l, int u) 
     { 
      Random generator = new Random(); 
      return generator.Next(l, u); 
     } 

    } 
} 

的Program.cs:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace Randomizer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.Out.WriteLine("Please enter the minimum range for the random number\n"); 
      int min = int.Parse(Console.In.ReadLine()); 

      Console.Out.WriteLine("Please enter the maximum range for the random number\n"); 
      int max = int.Parse(Console.In.ReadLine()); 

      int RandomInt = new RandomNumber(); 

      Console.Out.WriteLine("Your random number is: " + RandomInt.RandomInRange(min, max)); 

      Console.In.ReadLine(); 
     } 
    } 

} 

我知道这几乎是一个小白问题,但我习惯C++。我在这里先向您的帮助表示感谢。 =]

回答

3

你只是初始化RandomNumber类的一个实例。你应该说:

RandomNumber random = new RandomNumber(); 
int randomInt = random.RandomRange(min,max); 
+0

啊,现在有道理。谢谢您的帮助! – Stradigos 2010-03-03 00:16:36

1
Console.Out.WriteLine("Your random number is: {0}" , RandomInt.RandomInR) 

是一种可能的解决方案。

+0

我喜欢这个,更干净。更少的代码行。 – Stradigos 2010-03-03 00:16:52

1

让我知道如果我失去了一些东西,但这样的:

int RandomInt = new RandomNumber(); 

应该是:

RandomNumber RandomInt = new RandomNumber(); 

你正在创建的RandomNumber实例,而不是int。为了缓解一些头痛的未来,你也可以使用C#3.0的type inference(新var关键字),让编译器推断类型:

var RandomInt = new RandomNumber(); 

(这是假设你正在使用C#3.0老版本。没有这个功能)

最后,作为一种风格的建议,你应该做的类的实例以小写字母开始,从实际的课程,这与资本开始分化:

var randomInt = new RandomNumber(); 
+0

真的吗?感谢有关变种的信息。很酷的功能。 – Stradigos 2010-03-03 00:18:40

3

这是重要的是要注意到你不想每次都创建一个新的随机数。此外,它看起来像你想使用它的方式静态类。

public static class RandomNumber 
{ 
    private static readonly Random generator = new Random(); 

    public static int RandomInRange(int l, int u) 
    { 
     return generator.Next(l, u); 
    } 
} 
+0

附加说明:你不想每次创建一个新的随机的原因是因为Random是从* clock *中除去的。如果您在同一个时钟片中创建其中的两个,它们将生成*完全相同的数字*。在一个静态变量中随机生成一个ONCE,然后继续使用相同的Random,而不是每次都创建一个新的。 – 2010-03-03 00:42:11