C# 铸造';int';至`随机';

C# 铸造';int';至`随机';,c#,random,casting,C#,Random,Casting,我有一个函数foo(Random r),它的输入中有一个Random 有时,随机数是由用户给出的,而不是随机类型,我不知道如何将其他类型的值,如int或byte[]分配给random。 我的意思是有时我需要调用这个函数,就像foo(intr)。 顺便说一下,我只是从dll调用这个函数,没有源代码 如何将int作为Random传递?这个怎么办? 这只返回您设置的整数 class NotRandom : Random { public int Integer{get;set;} p

我有一个函数
foo(Random r)
,它的输入中有一个Random

有时,随机数是由用户给出的,而不是随机类型,我不知道如何将其他类型的值,如
int
byte[]
分配给
random
。 我的意思是有时我需要调用这个函数,就像
foo(intr)
。 顺便说一下,我只是从dll调用这个函数,没有源代码

如何将
int
作为
Random
传递?

这个怎么办?
这只返回您设置的整数

class NotRandom : Random
{
    public int Integer{get;set;}

    public NotRandom(int integer)
    {
        Integer = integer;
    }

    public override int Next()
    {
        return Integer;
    }

    public override int Next(int maxValue)
    {
        return Integer;
    }

    public override void NextBytes(byte[] buffer)
    {
        for (int i = 0; i < buffer.Length; i++)
            buffer[i] = (byte)Integer;
    }

    protected override double Sample()
    {
        return (double)Integer;
    }

    public override int Next(int minValue, int maxValue)
    {
        return Integer;
    }

    public override double NextDouble()
    {
        return (double)Integer;
    }
}
那么,如果你打电话如下

int randNum = GetRandomNumber(new NotRandom(3));

randNum始终有3个参数,您可以将NotRandom的构造函数作为参数传递。

创建一个新的Random类型的类,并根据库手册正确初始化它。
foo()
是否从
r
中提取一个随机数?如果是这样,您可能需要重构
foo
,这样您就有了一个函数
foo(Int r)
,它接收一个整数,还有
foo(Random r)
,它接收一个随机数生成器。然后第二个方法将用一个整数调用第一个方法。@Grantwiney:我只是指用户提供的手动随机值。请确保理解随机值和随机生成器之间的区别!!你所要求的是可能的,但也是完全疯狂和无用的。
int randNum = GetRandomNumber(new NotRandom(3));