我想創建一個擴展方法,該方法將有效地將單個對象包裝爲IEnumerables。這是爲了避免最終將new [] {}
置於表達式中間的情況。這是很容易使用下面的方法做:創建擴展方法以將類型打包爲IEnumerables
public static IEnumerable<TSource> WrapAsEnumerable<TSource>(this TSource source)
{
return new[] { source };
}
的問題是,這將適用於任何和所有類型的(這是預期的行爲),但是這也將使得副作用方法可用於IEnumerable <T>
實例。在解決的擴展類型爲IEnumerable<T>
的情況下,我只想返回此IEnumerable,因爲替代方法是找到自己的IEnumerable<IEnumerable<T>>
,這在調用方法時並不是您期望的。
本能地(也許睏倦),我首先創建看起來像這樣
public static IEnumerable<TSource> WrapAsEnumerable<TSource>(this IEnumerable<TSource> source)
{
return source;
}
,以便處理其中包裹類型是IEnumerable<T>
的情況下的過載,但當然,控制流程總是解決了第一種方法。
所以,問題是:我怎樣才能創建這樣一種包裝方法,既可以處理擴展參數實例爲IEnumerable<T>
的情況,也可以處理這種情況。
該方法調用未解析爲第一種方法。它在編譯時使用[overloading resolution](https://msdn.microsoft.com/en-us/library/aa691336%28v=vs.71%29.aspx)。 –
非泛型集合會發生什麼,即IEnumerable? – Romoku
雖然它們仍然可以迭代,但我會將它們視爲可以包裝在IEnumerable中的單個實例。 –