C# 这个将字符串拆分为数组的扩展方法还可以参数化吗?

C# 这个将字符串拆分为数组的扩展方法还可以参数化吗?,c#,extension-methods,C#,Extension Methods,下面是我编写的一个片段,用于将逗号列表转换为T数组: public static T[] ToArray<T>(this string s, params char[] seps) { if (typeof(T) == typeof(int)) { return s.Split(seps.Length > 0 ? seps : new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)

下面是我编写的一个片段,用于将逗号列表转换为T数组:

public static T[] ToArray<T>(this string s, params char[] seps)
{
    if (typeof(T) == typeof(int))
    {
        return s.Split(seps.Length > 0 ? seps : new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                    .Select(id => int.Parse(id))
                    .Cast<T>()
                    .ToArray();
    }
    else throw new Exception("cannot convert to " + typeof(T).Name);
}
我需要为我想要支持的每一种类型设置一个案例


有没有更好的方法来编写这类代码?

您总是可以这样做:

public static T[] ToArray<T>(this string s, Func<string, T> converter, params char[] seps)
{
    return s.Split(seps.Length > 0 ? seps : new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(converter)
            .ToArray();
}

我同意.Parse有点难看,但它为您提供了所需的任何数据类型的灵活性…

您始终可以执行以下操作:

public static T[] ToArray<T>(this string s, Func<string, T> converter, params char[] seps)
{
    return s.Split(seps.Length > 0 ? seps : new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(converter)
            .ToArray();
}
我同意.Parse有点难看,但它为您提供了所需的任何数据类型的灵活性…

如果您将T约束为IConvertible,则可以使用:

如果将T约束为IConvertible,则可以使用:

您可以尝试:

public static T[] ToArray<T>(this string s, Func<string, T> convert, char[] seps)
{
  char[] separators = seps != null && seps.Length > 0 ? seps : new[] { ',' };
  T[]    values     = s.Split(separators, StringSplitOptions.RemoveEmptyEntries)
                       .Select(x => convert(x))
                       .ToArray()
                       ;
  return values;
}
只需传入一个委托即可进行转换:

int[] Xs = "1,2,3".ToArray<int>(int.Parse , ',' , '-' , '/' , '|');
您可以尝试:

public static T[] ToArray<T>(this string s, Func<string, T> convert, char[] seps)
{
  char[] separators = seps != null && seps.Length > 0 ? seps : new[] { ',' };
  T[]    values     = s.Split(separators, StringSplitOptions.RemoveEmptyEntries)
                       .Select(x => convert(x))
                       .ToArray()
                       ;
  return values;
}
只需传入一个委托即可进行转换:

int[] Xs = "1,2,3".ToArray<int>(int.Parse , ',' , '-' , '/' , '|');

我也有小数。。。但是你的观点被采纳了-我只是对另一种方法很好奇,我也有小数。。。但是你的观点被采纳了——我只是好奇其他的方法