如何编写一个我可以在字符串和int上使用的扩展方法?

时间:2014-06-12 11:10:14

标签: c# string

我的代码中有这样的方法可以帮助我生成基于​​逗号的字符串

 public static class Extensions
    {
        public static string ToCommaList(this IEnumerable<string> val)
        {
            if (val.Count() == 0)
                return string.Empty;

            string ret = "";

            foreach (var str in val)
            {
                ret = ret + str + ",";
            }

            ret = ret.EndsWith(",") ? ret.Remove(ret.Length - 1, 1) : ret;

            return ret;
        }

    }

现在我的代码有问题,它无法在int列表上运行。我想做的是生成逗号列表,无论它是字符串还是int。我想在我的函数中检查它是否是int或string的列表,并在其上生成字符串。

我试图重构IEnumerable,但我觉得它不好。我只允许2种类型的对象(仅限字符串和int)。

有人可以告诉我代码,这样我就可以传递int和string两者,它会生成逗号列表。

3 个答案:

答案 0 :(得分:6)

public static string ToCommaList<T>(this IEnumerable<T> val)
{
    if (!val.Any())
        return string.Empty;

    return String.Join(",", val);
}

答案 1 :(得分:0)

你应该有一个通用的IEnumerable像这样:

public static string ToCommaList<T>(this IEnumerable<T> val)
    {
        if (val.Count() == 0)
            return string.Empty;
        string ret = "";
        foreach (var str in val)
        {
            ret = ret + str + ",";
        }
        ret = ret.EndsWith(",") ? ret.Remove(ret.Length - 1, 1) : ret;
        return ret;
    }

答案 2 :(得分:0)

试试这个

public static string ToCommaList<T>(this IEnumerable<T> val) where T:class
        {
            if (val.Count() == 0)
                return string.Empty;
           StringBuilder sb=new StringBuilder();
            if (typeof(T) == typeof(int))
            {
                var strng = val.Select(x => x.ToString());
                foreach (var str in strng)
                {
                    sb.AppendFormat("{0},", str);
                }
                return sb.ToString().Trim(new char[] { ',' });
            }
            else if (typeof(T) == typeof(string))
            {
                foreach (var str in val)
                {
                    sb.AppendFormat("{0},", str);
                }
            }
            return sb.ToString().Trim(new char[] { ',' });
        }