我的问题是关于在C# 4中是否适当地使用
我有一些辅助方法,它们提供了比标准的
dynamic
关键字。我有一些辅助方法,它们提供了比标准的
ToString
方法更有用的对象表示形式,我在单元测试中使用。这里是一个简化的例子:public static string PrettyPrint<T>(IEnumerable<T> list)
{
return string.Join(", ", list);
}
// Needed because string is IEnumerable<char>, to prevent
// "Hello" -> "H, e, l, l, o"
public static string PrettyPrint(string s)
{
return s;
}
public static string PrettyPrint(object o)
{
return o.ToString();
}
我使用它们类似于这样:
public static void PrettyPrinting()
{
object[] things = { 1, "Hello", new int[] {1, 2, 3} };
foreach (dynamic item in things)
{
Console.WriteLine(PrettyPrint(item));
}
}
这会生成以下输出:1
Hello
1, 2, 3
注意,如果我将dynamic
关键字替换为object
,则会得到以下结果(所有调用都通过PrettyPrint(object)
路由),这正是我想要避免的:
1
Hello
System.Int32[]
那么我的问题本质上是,这是一种代码异味还是将一个object
强制转换为dynamic
的方法是合法的?