一般将 List<T> 转换为 List<string>

Convert List<T> to List<string> generically

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

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

或者我是否必须有一个大的 switch 语句并首先转换为适当的运行时列表类型,然后将其转换为列表?

谢谢

将列表转换为非通用类型。

IEnumerable 效果很好,尽管在将其转换为 IEnumerable<T> 之前可用的方法有限。有了 IEnumerable<T> 后,您可以使用 ToString() 将元素转换为字符串。

var list = ((IEnumerable)obj).OfType<object>();
List<string> strings = list.Select(x => x.ToString()).ToList();

在您的 if 语句中将您的 obj 转换为 IEnumerable。你知道这是安全的,因为它是一个列表。然后你可以使用 Enumerable 静态方法 CastSelect.

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