gpt4 book ai didi

c# - 如何编写将分隔字符串转换为列表的通用扩展方法?

转载 作者:太空狗 更新时间:2023-10-29 17:27:58 24 4
gpt4 key购买 nike

我们经常需要将值由某个字符分隔的字符串转换为列表。我想编写一个通用扩展方法,将字符串转换为指定类型的列表。这是我目前所拥有的:

    public static List<T> ToDelimitedList<T>(this string value, string delimiter)
{
if (value == null)
{
return new List<T>();
}

var output = value.Split(new string[] { delimiter }, StringSplitOptions.RemoveEmptyEntries);
return output.Select(x => (T)x).ToList();
}

但是我得到一个错误。

Cannot convert type 'string' to type 'T'.

是否有更好的方法来执行此操作,或者我是否需要为不同类型的列表创建多个扩展方法并执行 Convert.ToInt32() 等操作?

更新

我正在尝试做这样的事情:

var someStr = "123,4,56,78,100";
List<int> intList = someStr.ToDelimitedList<int>(",");

var someStr = "true;false;true;true;false";
List<bool> boolList = someStr.ToDelimitedList<bool>(";");

最佳答案

Convert.ChangeType将适用于原始类型和许多框架类型(假设默认解析规则足够好):

return output.Select(x => (T) Convert.ChangeType(x, typeof(T)))
.ToList();

如果您需要它为您自己的自定义类型工作,您必须让它们实现 IConvertible界面。

请记住,这不够复杂,无法使用自定义转换规则,也不够稳健,无法正确处理故障(抛出异常并使整个操作失败之外)。如果您需要对此的支持,请提供接受 TypeConverter 的重载。或转换委托(delegate)(如 mike z 的回答)。

关于c# - 如何编写将分隔字符串转换为列表的通用扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15481504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com