正确的方式来装箱bool 到C#中的对象

我想find在C#.NET 4.0中将bool[]转换为object[]的最佳方法。
现在我有这个variables:

 object[] objectArray = new object [] { true, false, true }; string[] stringArray = new string[] { "true", "false", "true" }; bool[] boolArray = new bool[] { true, false, true }; 

所有创build好。 对于“明确的types”,作为boolobject , 拳击工作正常( object o = true; )。 但在这种情况下,我可以只从string数组转换为对象数组,而不是从一个布尔数组:

 objectArray = stringArray; // OK objectArray = boolArray; // WRONG Cannot implicitly convert bool[] to object[] 

另外,在一些方法中,我发送一个对象数组的列表。 和前面的例子一样,我可以对string进行转换,但是不能用于布尔数组:

 List<object[]> testList; testList = new List<object[]>() { objectArray }; // OK testList = new List<object[]>() { stringArray }; // OK testList = new List<object[]>() { boolArray }; // WRONG - I can not add bool[] into object[] 

从一些方法,我有一个布尔数组里有很多项目…最后的方法,所有计算后,返回一个对象数组作为结果(有时它必须返回其他types,我不想分裂成多个方法)。

而我不能使用return_object_array = boolean_array 。 这样做的最好方法是什么? 循环遍历布尔数组中的所有值,并以最快的方式将其存储到对象数组中?

什么是最好/最快/最正确的方法来做到这一点?
注意:这个方法是在.NET 4.0下编写的,但如果你知道.NET 4.5的更好的解决scheme,我想知道它。

这听起来像你只需要把每个值,对不对? 这很简单:

 object[] objectArray = boolArray.Select(b => (object) b).ToArray(); 

甚至:

 object[] objectArray = boolArray.Cast<object>().ToArray(); 

Cast 执行装箱/取消装箱操作。)

或者从了解正确的大小开始,稍微更高效一些:

 object[] objectArray = Array.ConvertAll(boolArray, b => (object) b); 

或者,更改您的API不需要开始的object[] 。 考虑使用generics方法/types。

编辑:为了避免每次拳击,你可以很容易地写你自己的扩展类相似的框架一nmclean显示:

 public static class BooleanBoxExtensions { private static readonly object BoxedTrue = true; private static readonly object BoxedFalse = false; public static object BoxCheaply(this bool value) { return value ? BoxedTrue : BoxedFalse; } } 

然后:

 object[] objectArray = Array.ConvertAll(boolArray, b => b.BoxCheaply()); 

要么:

 object[] objectArray = boolArray.Select(BooleanBoxExtensions.BoxCheaply) .ToArray(); 

Cast<T>方法执行装箱。

 var castedValues = boolArray.Cast<object>(); objectArray = castedValues.ToArray(); 
 bool[] boolArray = { true, false, true }; var objArray = Array.ConvertAll(boolArray, x => (object)x);