Рассматривал пример программы, в которой весь код написан на C#, а в одной функции используется фрагмент, написанный на VB. Вопрос в том, как перевести этот фрагмент также на С#?
public Cell getNeighbor()
{
List<Cell> c = new List<Cell>();
if (!(NeighborNorthID == "none") && Cells[NeighborNorthID].Visited == false)
c.Add(Cells[NeighborNorthID]);
if (!(NeighborSouthID == "none") && Cells[NeighborSouthID].Visited == false)
c.Add(Cells[NeighborSouthID]);
if (!(NeighborEastID == "none") && Cells[NeighborEastID].Visited == false)
c.Add(Cells[NeighborEastID]);
if (!(NeighborWestID == "none") && Cells[NeighborWestID].Visited == false)
c.Add(Cells[NeighborWestID]);
int max = c.Count;
Cell currentCell = null;
if (c.Count > 0)
{
Microsoft.VisualBasic.VBMath.Randomize();
int index = Convert.ToInt32(Conversion.Int(c.Count * VBMath.Rnd()));
currentCell = c[index];
}
VBMath.Rnd() - функция, возвращающая случайное число. В С# можете воспользоваться классом Random.
Random rnd1 = new Random();
var randomNum = rnd1.Next();
Метод VBMath.Rnd() возвращает случайное число типа System.Single (то есть, float с точки зрения C#) между 0 и 1.
Для C# аналогичной функциональностью обладает функция NextDouble класса Random. Учитывая вызов Randomize() перед вызовом Rnd(), нам необходимо инициализированное текущим системным временем случайное число.
Далее, конструкция Convert.ToInt32(Conversion.Int(c.Count * VBMath.Rnd())) выдаёт случайное целое число от 0 до c.Count (исключая верхнюю границу). Это достигается более простым методом на C#, т. к. равномерно распределённое целое число можно получить и прямо, без участия плавающей запятой:
var random = new Random(); // инициализирует текущим временем
int index = random.Next(c.Count);
currentCell = c[index];
Учтите, что результат будет не один-в-один таким же, как в с кодом на VB, т. к. алгоритмы подсчёта случайных чисел и использование seed в них отличаются. Тем не менее, поскольку речь идёт о случайных числах, повторение результата обычно и не нужно.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости