一般将 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 静态方法 Cast
和 Select
.
List<String> list = ((IEnumerable)obj).Cast<Object>().Select(x => x.ToString());
我有一种情况,我在运行时反思一组属性。当我得到实际的 属性 值时,它只是对象类型,但我进行了检查以确认它是一个通用列表。在我的场景中,这些通用列表将始终包含某种原始值(整数、字符串、长整数等)。有没有一种简单的方法可以将任何类型的列表转换为字符串列表?像这样:
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 静态方法 Cast
和 Select
.
List<String> list = ((IEnumerable)obj).Cast<Object>().Select(x => x.ToString());