vida valor una tipos tienda segun ropa reales marketing importancia ejemplos ejemplo diaria cadena autores c# c#-4.0 c#-3.0

c# - una - importancia de la cadena de valor pdf



objetar a la matriz de cadena (3)

Estoy tratando de convertir un objeto (se declara aquí como ''obj'': objeto es matriz, primitivo) a una matriz de cadenas.

objeto puede ser cualquier cosa [], int16 [], etc.

He estado tratando de usar

string[] str = Array.ConvertAll<object, string>((object[])obj, Convert.ToString);

El problema ocurre cuando trato de convertir el objeto tipo desconocido en objeto []. He estado recibiendo un error de lanzamiento.

Un intento que hice, que falló, estaba usando

object[] arr = (object[])obj;

o

IEnumerable<object> list = obj as IEnumerable<object> object[] arr = (object[])list;

Vi publicaciones sobre el tipo de valor y el problema del tipo de referencia en el casting.

¿Habría un código simple que pueda manejar la conversión al objeto [] independientemente del tipo de objeto, siempre que sea una matriz? Intento evitar el manejo manual de todos los tipos posibles de conversión.

gracias por adelantado


Puede usar el hecho de que cada matriz implementa IEnumerable :

string[] arr = ((IEnumerable)obj).Cast<object>() .Select(x => x.ToString()) .ToArray();

Esto encapsulará las primitivas de manera apropiada, antes de convertirlas en cadenas.

La razón por la que falla el reparto es que aunque las matrices de tipos de referencia son covariantes, las matrices de tipos de valores no son:

object[] x = new string[10]; // Fine object[] y = new int[10]; // Fails

IEnumerable embargo, solo funcionará con IEnumerable . Diablos, podrías lanzar a Array si quisieras.


Si siempre es una colección de algún tipo (matriz, lista, etc.), intente volver al viejo System.Collections.IEnumerable y vaya desde allí.

string[] str = ((System.Collections.IEnumerable)obj) .Cast<object>() .Select(x => x.ToString()) .ToArray();

Aquí hay una implementación más completa que también maneja no colecciones

static string[] ToStringArray(object arg) { var collection = arg as System.Collections.IEnumerable; if (collection != null) { return collection .Cast<object>() .Select(x => x.ToString()) .ToArray(); } if (arg == null) { return new string[] { }; } return new string[] { arg.ToString() }; }


mi ejemplo:

public class TestObject { public string Property1 { get; set; } public string Property2 { get; set; } public string Property3 { get; set; } } static void Main(string[] args) { List<TestObject> testObjectList = new List<TestObject> { new TestObject() { Property1 = "1", Property2 = "2", Property3 = "3" }, new TestObject() { Property1 = "1", Property2 = "2", Property3 = "3" }, new TestObject() { Property1 = "1", Property2 = "2", Property3 = "3" } }; List<string[]> convertedTestObjectList = testObjectList.Select(x => new string[] { x.Property1, x.Property2, x.Property3 }).ToList(); }