C# 如何构建同时接受对象和原语的通用C数组内容打印机?
我只是想通过打印int和string数组的内容来快速调试web服务。是否有一种方法可以做到这一点 我试过了C# 如何构建同时接受对象和原语的通用C数组内容打印机?,c#,.net,arrays,tostring,C#,.net,Arrays,Tostring,我只是想通过打印int和string数组的内容来快速调试web服务。是否有一种方法可以做到这一点 我试过了 public static string ArrayToString(object[] array) { StringBuilder sb = new StringBuilder(); foreach (Object item in array) { sb.Append(item.ToString()); sb.Append(" "
public static string ArrayToString(object[] array)
{
StringBuilder sb = new StringBuilder();
foreach (Object item in array)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
但当我尝试向它发送一个primative数组int[]时,由于它不是一个对象,这会阻塞
我觉得这很奇怪,因为向下面的方法发送int可以工作
static void PrintObject(object obj)
{
Console.WriteLine(obj.ToString());
}
不管怎么说,是用一种方法来实现这一点,还是我只需要人工创建两种不同的方法
当然,我是否应该使用数组是有疑问的,但是web服务已经到位了
另见:
试着这样做:
static String toString<T>(IEnumerable<T> list)
{
StringBuilder sb = new StringBuilder();
foreach (T item in list)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
toString(new int[] { 1, 2, 3 });
toString(new String[] { "1", "2", "3" });
为什么选择阵列?您的代码不依赖于数组的任何特定属性,而是只查看对象列表。看起来IEnumerable是一个更好的选择,它允许几乎任何对象的集合
public static string ArrayToString(IEnumerable source)
{
StringBuilder sb = new StringBuilder();
foreach (Object item in source)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
有几种方法可以做到这一点 如果你有Linq,你可以
int[] foo = new int[] {1,2,3,4};
ArrayToString(foo.Cast<Object>().ToArray());
然后把它寄出去
或者,您可以创建一个通用扩展方法
public static string ToString<T>(this IEnumerable<T> val)
{
StringBuilder sb = new StringBuilder();
foreach(var item in val)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
真管用,太棒了。没有意识到基元数组会扩展IList。谢谢。您可以同样轻松地使用IEnumerable或ICollection,因为您不需要通过索引来更改列表或访问元素IList的主要区别优点。IEnumerable、ICollection和IList三个接口都实现了与数组或一般序列相关联的不同功能。IEnumerable是最简单的,它只定义了逐个获取每个元素的能力,即支持每个元素。ICollection是一个IEnumerable,它表示一个序列,该序列还附加了一个确定的长度,如果它不是只读的,您可以从中添加和删除内容。IList是一个按一定顺序排列的ICollection,因此它允许您按索引操作元素,就像您可以使用数组一样。有关更多信息,我建议您查看每个接口的MSDN文档,因为它们会准确地告诉您它们支持哪些方法,但这是Cliffs Notes版本。字典/哈希表是IEnumerable和ICollection的一个示例-它有元素计数,您可以添加和删除元素-但它不是IList,因为您不能要求哈希表的第一个元素。我同意,但web服务已经到位,并且运行良好。我认为IEnumerable会更好,因为这样可以防止在迭代集合时出现任何装箱。我认为我喜欢这个解决方案,因为它是泛型的最佳使用。我应该想到这一点。
int[] x = new int[] { 1, 2, 3 };
string[] y = new string[] { "a", "b", "c" };
Console.WriteLine(ArrayToString(x));
Console.WriteLine(ArrayToString(y));
int[] foo = new int[] {1,2,3,4};
ArrayToString(foo.Cast<Object>().ToArray());
public static string ToString<T>(this IEnumerable<T> val)
{
StringBuilder sb = new StringBuilder();
foreach(var item in val)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}