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)代码>