tipos - Forma correcta de boxeo bool[] en el objeto[] en C#
variables c# español (3)
Parece que solo necesitas guardar cada valor, ¿verdad? Eso es tan simple como:
object[] objectArray = boolArray.Select(b => (object) b).ToArray();
O incluso:
object[] objectArray = boolArray.Cast<object>().ToArray();
(Como Cast
realizará operaciones de boxeo / desempaquetado).
O un poco más eficiente en términos de conocer el tamaño correcto para empezar:
object[] objectArray = Array.ConvertAll(boolArray, b => (object) b);
Alternativamente, cambie sus API para no requerir un object[]
para comenzar. Considere usar métodos / tipos genéricos en su lugar.
EDITAR: Para evitar el boxeo cada vez, puede escribir fácilmente su propia clase de extensión similar al marco que mostró 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;
}
}
Entonces:
object[] objectArray = Array.ConvertAll(boolArray, b => b.BoxCheaply());
O:
object[] objectArray = boolArray.Select(BooleanBoxExtensions.BoxCheaply)
.ToArray();
Quiero encontrar el mejor enfoque para convertir bool[]
en object[]
en C # .NET 4.0.
Ahora tengo estas variables:
object[] objectArray = new object [] { true, false, true };
string[] stringArray = new string[] { "true", "false", "true" };
bool[] boolArray = new bool[] { true, false, true };
Todos son creados bien. Para ''tipos claros'', suc como bool
y object
, el boxing funciona bien ( object o = true;
). Pero en este caso puedo hacer la conversión solo de una matriz de cadenas a una matriz de objetos, pero no de una matriz booleana:
objectArray = stringArray; // OK
objectArray = boolArray; // WRONG Cannot implicitly convert bool[] to object[]
Además, en algunos métodos estoy enviando una lista de matrices de objetos. Como en el caso anterior, puedo hacer esto (conversión) para cadena, pero no para una matriz booleana:
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[]
A partir de algunos métodos, tengo una matriz booleana con muchos elementos dentro ... y el último método, después de todos los cálculos, devuelve una matriz de objetos como resultado (a veces debe devolver otros tipos y no quiero dividirlo en múltiples métodos).
Considerando que no puedo usar return_object_array = boolean_array
. ¿Cuál es el mejor método para hacer esto? ¿Se realiza un bucle sobre todos los valores en una matriz booleana y se almacena en una matriz de objetos de la forma más rápida?
¿Cuál es el enfoque mejor / más rápido / más correcto para hacer esto?
Nota: Este método está escrito en .NET 4.0, pero si conoce una mejor solución para .NET 4.5 me gustaría saberlo.
Cast<T>
método Cast<T>
realiza el boxeo.
var castedValues = boolArray.Cast<object>();
objectArray = castedValues.ToArray();
bool[] boolArray = { true, false, true };
var objArray = Array.ConvertAll(boolArray, x => (object)x);