如何构建一个同时接受对象和基元的通用 C# 数组内容打印机?
题
我只是想通过打印 int 和 string 数组的内容来快速调试 Web 服务。无论如何,有没有一种方法可以做到这一点?
我试过
public static string ArrayToString(object[] array)
{
StringBuilder sb = new StringBuilder();
foreach (Object item in array)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
但是当我尝试向它发送一个原始数组(int [])时,由于它不是一个对象,这会令人窒息。
我觉得很奇怪,因为向下面的方法发送一个 int 是有效的
static void PrintObject(object obj)
{
Console.WriteLine(obj.ToString());
}
无论如何,是否可以用一种方法来执行此操作,或者我是否必须亲自创建两个单独的方法?
当然,我是否应该使用数组还值得怀疑,但网络服务已经就位。
也可以看看:
解决方案
public static string ArrayToString<T>(T[] array)
{
StringBuilder sb = new StringBuilder();
foreach (T item in array)
{
sb.Append(item.ToString());
sb.Append(" ");
}
return sb.ToString();
}
然后
int[] x = new int[] { 1, 2, 3 };
string[] y = new string[] { "a", "b", "c" };
Console.WriteLine(ArrayToString(x));
Console.WriteLine(ArrayToString(y));
其他提示
尝试这样的事情:
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();
}
编译器会很乐意推断出类型 T
根据您传入的列表的类型,如下所示:
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();
}
private string PrintObjects<T>(IEnumerable<T> objs)
{
return string.Join(" ", objs.Select(o => o.ToString()).ToArray());
}
有几种方法可以做到这一点。
如果你有 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();
}
不隶属于 StackOverflow