c# печатают имя класса из статической функции

function getUniqueRandomNos() {
    var indexedArrayOfRandomNo = [];
    for (var i = 0; i < 100; i++) {
        var randNo = Math.random();
        indexedArrayOfRandomNo.push([i, randNo]);
    }
    indexedArrayOfRandomNo.sort(function (arr1, arr2) {
        return arr1[1] - arr2[1]
    });
    var uniqueRandNoArray = [];
    for (i = 0; i < 8; i++) {
        uniqueRandNoArray.push(indexedArrayOfRandomNo[i][0]);
    }
    return uniqueRandNoArray;
}

Я думаю, что этот метод отличается от методов, приведенных в большинстве ответов, поэтому я подумал, что могу добавить здесь ответ (хотя вопрос был задан 4 года назад).

Мы генерируем 100 случайных чисел и помечаем каждый из них цифрами от 1 до 100. Затем мы сортируем эти помеченные случайные числа, и теги получают случайным образом перетасовываются. В качестве альтернативы, по мере необходимости в этом вопросе, можно было бы покончить с тем, чтобы найти только 8 из отмеченных случайных чисел. Поиск 8 лучших предметов дешевле, чем сортировка всего массива.

Здесь следует отметить, что алгоритм сортировки влияет на этот алгоритм. Если используемый алгоритм сортировки является стабильным, есть небольшое смещение в пользу меньших чисел. В идеале мы хотели бы, чтобы алгоритм сортировки был неустойчивым и даже не предвзятым к стабильности (или нестабильности) для получения ответа с совершенно равномерным распределением вероятности.

28
задан TK. 16 February 2009 в 08:36
поделиться

5 ответов

Console.WriteLine(new StackFrame().GetMethod().DeclaringType);
21
ответ дан Matt Hamilton 14 October 2019 в 09:34
поделиться

(Инструмент для очистки, IMO) альтернатива (все еще замедляются как, ад и я съежился бы, если бы я видел это в производственной кодовой базе):

Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType);

Между прочим, при выполнении этого для входа некоторым платформам журналирования (таким как log4net) встроили способность. И да, они предупреждают Вас в документах, что это - потенциальный кошмар производительности.

6
ответ дан Tim Cooper 14 October 2019 в 09:34
поделиться

В то время как ответы StackTrace корректны, у них действительно есть издержки. Если Вы просто хотите безопасность против того, чтобы менять имя, рассматриваете typeof(foo).Name. Так как статические методы не могут быть виртуальными, это должно обычно быть прекрасным.

11
ответ дан Marc Gravell 14 October 2019 в 09:34
поделиться

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

-1
ответ дан Vilx- 14 October 2019 в 09:34
поделиться

класс StackTrace может сделать это.

2
ответ дан Anton Gogolev 14 October 2019 в 09:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: