2011-02-22 12 views

Respuesta

20

Tiene dos opciones en función de los objetos reales en dataRow.ItemArray

Si en realidad hay objetos de cadena en el objeto [] se puede elemento solo echo.

dataRow.ItemArray.OfType<string>().ToList(); 

pero si los objetos son de otro tipo, como int o alguna otra cosa que necesita para convertir la a cadena (en este ejemplo, con .ToString() pero otro método personalizado puede ser requerida en su caso

dataRow.ItemArray.Select(o => o.ToString()).ToList(); 

Editar:.
Si usted no necesita List<string> o explícitamente string[] puede dejar el .ToList() salir y conseguir un lugar IEnumerable<string>

+2

+1 Por hablar sobre * ambos * coerción y conversión. Considere mencionar/manejar 'null' /' DBNull' en el ejemplo de conversión ya que estos son casos algo comunes (en mi experiencia). –

3

ToArray y ToList no bastante hacer lo que quiere, ya que sólo devolverá un objeto de matriz o lista. Primero debe masajear los datos en cadenas, y Select puede ayudar. Prueba esto:

dataRow.ItemArray.Select(i => i == null ? string.Empty : i.ToString()).ToArray(); 
+0

prefiero ' "" + I' en este caso, ya que tiene el mismo efecto que la w.r.t. ternaria nulls - pero style-subjective :) –

4
List<string> strList = objArray.Cast<String>(); 

es posible que desee comprobar si hay valores nulos en primer lugar:

List<string> strList = objArray.Select(o => o == null ? String.Empty : o.ToString()).ToList(); 
+1

Debe señalarse que esto no causa la conversión que puede (o no) ser deseada. –

+0

El segundo ejemplo es * no * solo el primero con una verificación nula pero una * conversión * explícita. Esto debe ser señalado. –

4

Usted puede utilizar System.Array.ConvertTo con System.Convert.ToString como delegado.

9
object[] a = new object[10]; 
string[] b = Array.ConvertAll(a, p => (p ?? String.Empty).ToString()) 

(la línea que desea es la segunda)

Cuestiones relacionadas