Расширение Счетного класса в c#?

Я не означаю это звучать придирчивым, но это не имеет значения.

Серьезно.

Взгляд на вещи, которые важны: Ваш проект, Ваш код, Ваше задание, Ваша личная жизнь. Ни один из них не будет иметь их успех, возлагают, используете ли Вы "это" ключевое слово для квалификации доступа к полям. Это ключевое слово не поможет Вам поставляться вовремя. Это не собирается уменьшать ошибки, это не будет иметь любой ощутимый эффект на качество кода или пригодность для обслуживания. Это не собирается получать Вас повышение или позволять Вам проводить меньше времени в офисе.

Это - действительно просто проблема стиля. Если Вам нравится "это", то используйте его. Если Вы не делаете, то не делайте. Если Вам нужен он для получения, корректная семантика тогда используют его. Истина, у каждого программиста есть свой собственный уникальный стиль программирования. Тот стиль отражает, что понятия конкретного программиста того, на что должен быть похожим "наиболее эстетически приятный код". По определению любой другой программист, который читает Ваш код, будет иметь различный стиль программирования. Это означает, там всегда будет чем-то, что Вы сделали это, другой парень не любит или сделал бы по-другому. В какой-то момент некоторый парень собирается считать Ваш код и ворчание о чем-то.

я не беспокоился бы о нем. Я просто удостоверился бы, что код максимально эстетически приятен согласно Вашим собственным вкусам. Если Вы спрашиваете 10 программистов, как к коду формата, Вы собираетесь получить приблизительно 15 различных мнений. Лучшая вещь сфокусироваться на состоит в том, как код учтен. Вещи абстрагированы право? Я выбирал понятные имена для вещей? Есть ли много дублирования кода? Есть ли способы, которыми я могу упростить материал? Разбирание в тех вещах, я думаю, окажет самое большое позитивное влияние на Ваш проект, Ваш код, Ваше задание и Вашу жизнь. По совпадению это, вероятно, также заставит другого парня ворчать меньше всего. Если Ваш код работает, легок читать и хорошо учтен, другой парень не собирается быть тщательным исследованием, как Вы инициализируете поля. Он просто собирается использовать Ваш код, чтобы поразиться это - величие, и затем идите дальше к чему-то еще.

5
задан RameshVel 5 November 2009 в 09:52
поделиться

5 ответов

Вы (как и я) ищете статические методы расширения:

http://madprops.org/blog/static-extension-methods/

Это невозможно в C #. Ближайшая альтернатива - определить другой статический класс с аналогичным именем (LongEnumerable?) И добавить к нему свой статический метод.

8
ответ дан 18 December 2019 в 13:16
поделиться

Методы расширения могут быть вызваны только для экземпляров типа, а поскольку Enumerable является статическим типом, его экземпляров никогда не будет, это означает, что вы не можете его расширить.

Также не имеет смысла использовать ваш метод Range в качестве расширения для IEnumerable . Ваш метод просто генерирует последовательность из длинных значений, ему не нужно расширять какой-либо конкретный экземпляр.

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

var example = EnumerableUtils.Range(0, long.MaxValue).Where(x => (x % 2) == 0);

// ...

public static class EnumerableUtils
{
    public static IEnumerable<long> Range(long start, long count)
    {
        for (long i = start; i < start + count; i++)
        {
            yield return i;
        }
    } 
}
5
ответ дан 18 December 2019 в 13:16
поделиться

Почему вы хотите расширить System.Linq.Enumerable? Этот класс использует методы Extension для расширения ДРУГИХ типов, реализующих IEnumerable.

В результате вы должны вызвать:

Enumerable.Range(long, long);

Вы бы предпочли напрямую расширить длинный класс:

public static IEnumerable<long> Range(this long source, long length)
{
    for (long i = source; i < length; i++)
    {
        yield return i;
    }
}

Таким образом, вы можете начать с

foreach (long item in 10.Range(20)) { }
1
ответ дан 18 December 2019 в 13:16
поделиться

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

0
ответ дан 18 December 2019 в 13:16
поделиться

У вас будет создать для этого свой собственный служебный класс; вы можете добавить статические методы через методы расширения.

0
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

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