我想找到转换bool[]到object[]C#.NET 4.0 的最佳方法.
现在我有这个变量:
object[] objectArray = new object [] { true, false, true };
string[] stringArray = new string[] { "true", "false", "true" };
bool[] boolArray = new bool[] { true, false, true };
Run Code Online (Sandbox Code Playgroud)
一切都很好.对于'clear types',suc as bool和object,拳击工作正常(object o = true;).但在这种情况下,我只能从字符串数组转换为对象数组,但不能从布尔数组转换:
objectArray = stringArray; // OK
objectArray = boolArray; // WRONG Cannot implicitly convert bool[] to object[]
Run Code Online (Sandbox Code Playgroud)
此外,在某些方法中,我发送一个对象数组列表.与前面的情况一样,我可以为字符串执行此操作(转换),但不能用于布尔数组:
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[]
Run Code Online (Sandbox Code Playgroud)
从某些方法,我有一个布尔数组,里面有很多项......最后一个方法,在所有计算之后,返回一个对象数组作为结果(有时它必须返回其他类型,我不想将它分成多个方法).
然而,我不能使用return_object_array = boolean_array.这样做的最佳方法是什么?循环遍历布尔数组中的所有值并以最快的方式将其存储到对象数组中?
这样做的最佳/最快/最正确的方法是什么?
注意:此方法在.NET 4.0下编写,但如果您知道更好的.NET 4.5解决方案,我想知道它.
Jon*_*eet 77
听起来你只需要打包每个值,对吧?这很简单:
object[] objectArray = boolArray.Select(b => (object) b).ToArray();
Run Code Online (Sandbox Code Playgroud)
甚至:
object[] objectArray = boolArray.Cast<object>().ToArray();
Run Code Online (Sandbox Code Playgroud)
(如Cast 将进行装箱/拆箱操作).
或者在知道正确的尺寸方面稍微有效一点:
object[] objectArray = Array.ConvertAll(boolArray, b => (object) b);
Run Code Online (Sandbox Code Playgroud)
另外,改变你的API 不要求一个object[]开始.请考虑使用通用方法/类型.
编辑:为了避免每次拳击,您可以轻松编写自己的扩展类,类似于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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
object[] objectArray = Array.ConvertAll(boolArray, b => b.BoxCheaply());
Run Code Online (Sandbox Code Playgroud)
要么:
object[] objectArray = boolArray.Select(BooleanBoxExtensions.BoxCheaply)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
Ser*_*lov 11
Cast<T> 方法执行拳击.
var castedValues = boolArray.Cast<object>();
objectArray = castedValues.ToArray();
Run Code Online (Sandbox Code Playgroud)
bool[] boolArray = { true, false, true };
var objArray = Array.ConvertAll(boolArray, x => (object)x);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6817 次 |
| 最近记录: |