将List <t>一般转换为List <string> </string> </t>

时间:2015-02-06 21:59:39

标签: c# linq collections

我有一种情况,我在运行时反映一组属性。当我得到实际的属性值时,它只是类型对象,但我检查确认它是一个通用列表。在我的场景中,这些通用列表将始终包含某种原始值(整数,字符串,长整数等)。有没有一种简单的方法可以将任何类型的List转换为字符串列表?像这样:

object obj = pi.GetValue(item, null);
Type type = obj.GetType();
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) {
    List<string> lstStrings = ???;
}

或者我是否必须先使用大的switch语句并转换为适当的运行时List类型然后将其转换为List?

感谢

2 个答案:

答案 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静态方法CastSelect

List<String> list = ((IEnumerable)obj).Cast<Object>().Select(x => x.ToString());