我有一种情况,我在运行时反映一组属性。当我得到实际的属性值时,它只是类型对象,但我检查确认它是一个通用列表。在我的场景中,这些通用列表将始终包含某种原始值(整数,字符串,长整数等)。有没有一种简单的方法可以将任何类型的List转换为字符串列表?像这样:
object obj = pi.GetValue(item, null);
Type type = obj.GetType();
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) {
List<string> lstStrings = ???;
}
或者我是否必须先使用大的switch语句并转换为适当的运行时List类型然后将其转换为List?
感谢
答案 0 :(得分:2)
将列表转换为非泛型类型。
IEnumerable
效果很好,但在您将其转换为IEnumerable<T>
之前,您可以使用哪些方法。获得IEnumerable<T>
后,您可以使用ToString()
将元素转换为字符串。
var list = ((IEnumerable)obj).OfType<object>();
List<string> strings = list.Select(x => x.ToString()).ToList();
答案 1 :(得分:1)
在你的if语句中将你的obj转换为IEnumerable。你知道这是安全的,因为它是一个List。然后,您可以使用Enumerable静态方法Cast
和Select
。
List<String> list = ((IEnumerable)obj).Cast<Object>().Select(x => x.ToString());