c# - 在整个应用程序中共享一个随机的卫生方式

标签 c# random

如果您到处使用System.Random,是否有一种卫生的方法来确保它是应用程序范围的单例?我有几个选择,包括以下内容:

  • 全局静态成员 - 这会产生必须调用 SomeClass.Random.Next() 的不幸效果。这可以通过使用静态来缓解,但这种方法并不能真正扩展,因为您必须在任何地方都这样做。
  • 派生单例——简单地从Random派生(它不是密封!)并使该类成为惰性线程安全单例
  • 在 DI 中将随机数注册为单例并注入(inject) - 但将 Random 注入(inject)到每个类中确实很乏味

理想情况下,我只想在任何类中调用一些rand(),并让它们全部引用单个实例。

最佳答案

this has the unfortunate effect of having to call SomeClass.Random.Next()

不,它不会:考虑这样的类型:

internal static class Foo
{
    private static readonly Random s_random = new Random();
    // todo: any thread safety concerns
    public static int Rand() => s_random.Next();
    public static int Rand(int minValue, int maxValue) => s_random.Next(minValue, maxValue);
}

现在您可以在想要使用它的文件顶部添加 using staticDeclaration.Foo;,并且现在您只需使用 Rand( ) 没有任何其他内容。

关于c# - 在整个应用程序中共享一个随机的卫生方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60070621/

相关文章:

algorithm - 如何存储未知大小的顺序呈现集合的样本?

c# - 如何在 C# 中以 surd 形式留下根?

c# - Math.NET CryptoRandomSource Next 是有偏差的

c# - 在 .NET 中处理和返回值

c# - 在 C# 和 Mysql 中使用预处理语句

iphone - CCRandom_0_1()生成相同的数字

c - srand() 在数组随机初始化下不工作

python - 将一列随机数添加到 dask 数据帧的正确方法

c# - 获取outlook中附件的outlookItem类型

c# - 将消息从一个 C# 控制台应用程序发送到另一个