C# 如何编写一个扩展方法,我可以使用字符串和int两者?

C# 如何编写一个扩展方法,我可以使用字符串和int两者?,c#,string,C#,String,我的代码中有这样一个方法,可以帮助我生成基于逗号的字符串 public static class Extensions { public static string ToCommaList(this IEnumerable<string> val) { if (val.Count() == 0) return string.Empty; string ret =

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

 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;
        }

    }
公共静态类扩展
{
公共静态字符串到commlist(此IEnumerable val)
{
如果(值计数()==0)
返回字符串。空;
字符串ret=“”;
foreach(var中的var str)
{
ret=ret+str+“,”;
}
ret=ret.EndsWith(“,”)ret.Remove(ret.Length-1,1):ret;
返回ret;
}
}
现在我的代码有一个问题,它不能处理int列表。我想做的是生成逗号列表,不管它是字符串还是int。我想检查我的函数中是int列表还是字符串,然后对其进行处理并生成字符串

我曾尝试过重构IEnumerable,但感觉不太好。我只允许2种类型的对象(仅限字符串和int)

是否有人可以向我显示代码,这样我就可以同时传递int和string,并生成逗号列表。

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

    return String.Join(",", val);
}
{ 如果(!val.Any()) 返回字符串。空; 返回字符串。Join(“,”,val); }
公共静态字符串到commlist(此IEnumerable val)
{
如果(!val.Any())
返回字符串。空;
返回字符串。Join(“,”,val);
}

您应该有这样一个通用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;
    }
公共静态字符串到commlist(此IEnumerable val)
{
如果(值计数()==0)
返回字符串。空;
字符串ret=“”;
foreach(var中的var str)
{
ret=ret+str+“,”;
}
ret=ret.EndsWith(“,”)ret.Remove(ret.Length-1,1):ret;
返回ret;
}

您应该有这样一个通用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;
    }
公共静态字符串到commlist(此IEnumerable val)
{
如果(值计数()==0)
返回字符串。空;
字符串ret=“”;
foreach(var中的var str)
{
ret=ret+str+“,”;
}
ret=ret.EndsWith(“,”)ret.Remove(ret.Length-1,1):ret;
返回ret;
}
试试这个

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[] { ',' });
        }
公共静态字符串tocommlist(此IEnumerable val),其中T:class
{
如果(值计数()==0)
返回字符串。空;
StringBuilder sb=新的StringBuilder();
if(typeof(T)=typeof(int))
{
var strng=val.Select(x=>x.ToString());
foreach(strng中的var str)
{
sb.AppendFormat(“{0},”,str);
}
返回sb.ToString().Trim(新字符[]{',});
}
else if(typeof(T)=typeof(string))
{
foreach(var中的var str)
{
sb.AppendFormat(“{0},”,str);
}
}
返回sb.ToString().Trim(新字符[]{',});
}
试试这个

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[] { ',' });
        }
公共静态字符串tocommlist(此IEnumerable val),其中T:class
{
如果(值计数()==0)
返回字符串。空;
StringBuilder sb=新的StringBuilder();
if(typeof(T)=typeof(int))
{
var strng=val.Select(x=>x.ToString());
foreach(strng中的var str)
{
sb.AppendFormat(“{0},”,str);
}
返回sb.ToString().Trim(新字符[]{',});
}
else if(typeof(T)=typeof(string))
{
foreach(var中的var str)
{
sb.AppendFormat(“{0},”,str);
}
}
返回sb.ToString().Trim(新字符[]{',});
}

Have generic IEnumerable type-此IEnumerable val中T的类型为int/string在另一个注释中,您可能希望使用StringBuilder而不是连接字符串。@ThumbMunkies您可以使用
struct
…为什么不直接使用
string.Join()
?@SimonWhitehead您是对的,具有泛型IEnumerable类型-此IEnumerable val,其中T的类型为int/string在另一个注释中,您希望使用StringBuilder而不是串联字符串。@ThumbMunkies您可以拥有
struct
…为什么不直接使用
string.Join()
?@SimonWhitehead您是对的,甚至只是
返回字符串。Join(“,”,val)
甚至只返回String.Join(“,”,val)