【发布时间】:2011-11-25 17:19:28
【问题描述】:
我的问题是关于以下内容是否适合在 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 是否合法?
【问题讨论】:
-
+1 类型系统的酷边缘案例!
-
有什么替代方案? foreach 循环是最昂贵的循环。我很想看看 CL 如何为此创建代码以及它在现实世界环境中的效率。
标签: c# c#-4.0 dynamic coding-style