Это ToIEnumerable хорошая практика?


У меня есть метод расширения, который делает это:

public static IEnumerable<T> ToIEnumerable<T>(this T source) where T : new()
{
    return new[] { source };
}

Мне нужно быть в состоянии преобразовать любой объект в интерфейс IEnumerable.

Например, когда я использую .Продажи за исключением метода:

public static IEnumerable<TSource> Except<TSource>(this IEnumerable<TSource> first)

Я могу назвать исключением , выполнив следующие действия:

return objects.Except(this.ToIEnumerable());

Это ToIEnumerable хорошая практика, или я должен решить проблему по-другому?



2300
4
задан 18 февраля 2011 в 12:02 Источник Поделиться
Комментарии
2 ответа

Пока я не вижу, почему ToIEnumerable это плохая практика, в данном конкретном случае я думаю, что это. Вы сравниваете только с одним объектом; почему бы просто не прикрепить предложение where на вещи? Т. е.

return objects.Where((other) => other != this);

или, возможно,

return objects.Where((other) => !Object.ReferenceEquals(other, this));

Не только это будет работать лучше, чем кроме как здесь, но это легче понять, и избегает целиком всю ToIEnumerable вещь.

7
ответ дан 18 февраля 2011 в 04:02 Источник Поделиться

Я не понимаю, почему нет.

Если ты хочешь быть 'monadically чистый', вы могли бы назвать его вернуть (так как в монадах, функции которого выполняет 'а -> м 'а называется Возвращение).

(См. Этот вопрос: FromSingleItem, или методом asenumerable - кто-то там предложил использовать существующие Перечислимым.Повторяю(t деталь, инт граф))

3
ответ дан 18 февраля 2011 в 01:02 Источник Поделиться