c# - 将对象转换为动态对象以便调用正确的重载方法是一种好习惯吗?

标签 c# c#-4.0 dynamic coding-style

我的问题是关于在 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/

相关文章:

c# - 在 XP 中写入注册表 (HKEY_LOCAL_MACHINE)

wpf - 在同一个控件 xaml 中访问依赖属性

php - 使用 PHP 动态禁用 Javascript/CSS 缓存?

c# - <T> 找不到通过 Activator 创建的对象类型

java - Java 中的动态转换

c# - 将已编辑的 XML 文档保存到任何位置?

c# - Xamarin - 在没有硬件加速支持的笔记本电脑上部署

c# - 将 WHERE sql 子句拆分为数组

wpf - Schedular.Dispatcher 在哪里?

c# - 如何从 C# 中的 url 获取子字符串或字符串的一部分