我的问题是关于在 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
请注意,如果我用 object
替换 dynamic
关键字,我会得到以下结果(所有调用都通过 PrettyPrint(object)
路由),这是我要避免的:
1
Hello
System.Int32[]
所以我的问题本质上是这是一种代码味道还是以这种方式将对象
转换为动态
是否合法?
最佳答案
只要不滥用,duck typing这也是 dynamic
被添加到语言中的部分原因。
关于c# - 将对象转换为动态对象以便调用正确的重载方法是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272348/