2012-07-31 75 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方法剂量注意工作,因为你期望从它的名字。

相关问题