2009-02-16 91 views
1

處理數學問題,我非常喜歡LINQ to Data。LINQ到數據:聰明類型識別

我想知道LINQ是否足夠聰明以避免像.ToArray()這樣的強制類型轉換,當我使用IEnumerable時它已經是一個數組。 參見下例:

/// <summary> Transforms an array of timeSeries into one ModelData. </summary> 
public static ModelData ToModelData(this IEnumerable<TimeSerieInfo> timeSeries) 
{ 
    var seriesArray = timeSeries as TimeSerieInfo[]; 
    return null != seriesArray ? 
     new ModelData(seriesArray) : 
     new ModelData(timeSeries.ToArray()); 
} 

是否LINQ避免變換到一個數組當IEnumerable<TimeSerieInfo> timeSeries已經是一個數組?

謝謝你的幫助。

+0

你的意思是LINQ to Objects,還是有其他一些LINQ提供者叫做LINQ to Data? – 2009-02-16 19:33:34

回答

4

LINQ創建數組,的副本,這是正確的行爲 IMO。如果撥打ToArray(),然後修改返回的數組有時修改原始收集和有時沒有。

+0

完全同意,這是正確的行爲。 – 2009-02-17 04:54:33

2

我懷疑它會做你所要求的並創建一個新的數組。你能不能改變你的ModelData的構造函數來代替IEnumerable

0

LINQ確實創建了數組的副本;它會創建一個System.Linq.Buffer<T>,它會創建一個數組的副本。

你可以儘管創建自己的擴展方法:

public static TSource[] ToArrayPreserved<TSource>(this IEnumerable<TSource> source) 
{ 
    return (source as TSource[]) ?? source.ToArray(); 
}