对象到string数组

我试图将一个对象(在这里声明为'obj':对象是数组,原始)转换为一个string数组。

对象可以是任何东西uint [],int16 []等

我一直在尝试使用

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

当我尝试将未知types的对象转换为object []时,就会出现这个问题。 我一直在铸造错误。

我做了一个失败的尝试

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

要么

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

我看到关于铸造的价值types和参考types问题的发布。

会有一个简单的代码,可以处理对象[],而不考虑types的对象,只要它是一个数组? 我试图避免每个可能的types铸造的手动处理。

提前致谢

您可以使用每个数组实现IEnumerable的事实:

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

这会将原语适当地装箱,然后将它们转换为string。

转换失败的原因是尽pipe引用types的数组是协变的,但是types的数组不是:

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

铸造只是IEnumerable将尽pipe工作。 哎呀,如果你想的话,你可以投到Array

如果它总是一些types(数组,列表等等)的集合,然后尝试将其转换回普通的旧System.Collections.IEnumerable并从那里

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

这是处理非集合的更彻底的实现

 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() }; } 

我的例子:

  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(); }