c# Какой лучший способ дать случайное число для функции - PullRequest
0 голосов
/ 24 января 2020

Что лучше и есть ли разница в случайных результатах?

 void Func1(Random rand)
{
var num=rand.Next();
}

 void Func2(ref Random rand)
{
var num=rand.Next();
}

Ответы [ 3 ]

6 голосов
/ 24 января 2020

Они функционально эквивалентны. Вы не обновляете ссылку rand в функции, поэтому ее передача ref ничего не делает.

Правило большого пальца: не используйте ref, если у вас абсолютно нет и понять, что он делает.

2 голосов
/ 24 января 2020

1) Никогда не используйте ref, если вам это не нужно явно.

2) Обычно вам не нужно пропускать Random через method с. Если вам нужно, возможно, вы делаете что-то не так в своем коде.

Почему? Потому что, чтобы быть уверенным в истинной случайности, лучше всегда использовать один и тот же экземпляр Random вместо создания многих из них.

Вот почему вы всегда должны объявлять один и использовать его повсюду, как в этом примере:

class Program
{
    static void Main(string[] args)
    {
        RandomNumbersPrinter randomNumbersPrinter = new RandomNumbersPrinter();
        int randomInteger = randomNumbersPrinter.GetRandomInteger();
        Console.WriteLine(randomInteger);
    }
}

public class RandomNumbersPrinter
{
    private static readonly Random _random = new Random();

    public int GetRandomInteger()
    {
        return _random.Next();
    }
}
1 голос
/ 24 января 2020

Поскольку Random является ссылочным типом, единственное отличие состоит в том, что ссылка на экземпляр копируется при вызове Func1.

В Func2 вы передаете фактическую существующую ссылку самому Random методу.

Пожалуйста, обратитесь к документам для получения дополнительной информации об этом.

Суть в том, что вам не следует использовать ключевое слово ref здесь, если вы не собираетесь назначать rand для нового Random объекта в методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...