2012-07-31 28 views
0

5分鐘前,我有一個真實場景,我需要將Guid[]轉換爲object[]將數組從T1類型轉換爲T2類型的處理有效方式

死者簡單快捷的出路,這是鍵入:

var dataset = inputArray.Select(item => (object)item).ToArray(); 

可讀和一切,但我不知道這是非常有效的(當然也可以,編譯器優化它的情況下一點點)。

你會建議最好從類型到類型(假設它可以在之間轉換,跳過整數解析等)?

編輯:Cast<T>擴展方法當然也可以使用。

var listOfGuids = new Guid[]{Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid()}; 
var listOfStrings = new string[]{"foo", "bar"}; 

var objectListGuidsLinq = listOfGuids.Cast<object>().ToArray(); 
var objectListStringsLinq = listOfStrings.Cast<object>().ToArray(); 
var objectListStringsDirect = (object[]) listOfStrings; 

回答

3

在它們需要被裝箱值類型的數組的情況下,因此需要你的方法或類似的等inputArray.Cast<object>().ToArray()東西。

但是,引用類型的數組可以隱式轉換爲object[]

此外,OfType擴展方法在您有多個類型的數組時有用。

+0

Guid不被視爲引用類型,因此對於該示例,數組不能隱式轉換爲object []。我猜對於值類型,最有效的方法是使用Select或Cast <> linq方法。 – Henrik 2012-08-01 08:37:23

+0

是的,我忘了提及,Guid是一種值類型。此外,還有'Array.CopyTo'和'Array.Copy'方法,但我做了一個快速的基準測試,並且在Linq方法中沒有看到任何顯着的性能差異。 – 2012-08-01 09:02:19

0

我想你是正確的。 請檢查:IEnumerable.Cast<>

看來,Cast方法劑量注意工作,因爲你期望從它的名字。

相關問題