将两个扩展函数合并为一个

本文关键字:一个 合并 两个 扩展 函数 | 更新日期: 2023-09-27 17:59:43

我有两个扩展函数,它们对List<int>List<string>进行操作。

public static string StringTokenizr(this List<int> list, NpStringTokenizrType type, string splitter = ",")
{
    return string.Join(",", list.ConvertAll(name => string.Format(type == NpStringTokenizrType.StringLike ? "'{0}'" : "{0}", name.ToString().Replace("'", "'''"))));
}
public static string StringTokenizr(this List<string> list, NpStringTokenizrType type, string splitter = ",")
{
    return string.Join(",", list.ConvertAll(name => string.Format(type == NpStringTokenizrType.StringLike ? "'{0}'" : "{0}", name.ToString().Replace("'", "'''"))));
}

有没有什么方法可以让它更通用,这样它就可以只是一个函数?

将两个扩展函数合并为一个

使您的方法通用:

public static string StringTokenizr<T>(
       this List<T> list, 
       NpStringTokenizrType type, 
       string splitter = ",")
{
   return string.Join(",", list.ConvertAll(name => string.Format(type == NpStringTokenizrType.StringLike ? "'{0}'" : "{0}", name.ToString().Replace("'", "'''"))));
}

通过这种方式,您可以使其通用,但此函数将不限于int和string,它将接受其他类型的

public static string StringTokenizr<T>(this List<T> list, NpStringTokenizrType type, string splitter = ",")
{
    return string.Join(",", list.ConvertAll(name => string.Format(type == NpStringTokenizrType.StringLike ? "'{0}'" : "{0}", name.ToString().Replace("'", "'''"))));
}

使用像List<T>这样的泛型Type参数并检查函数体中的类型,或者将List强制转换为进入函数的string