Мой вопрос заключается в том, следует ли, что следующее следует использовать ключевое слово dynamic
в С# 4.
У меня есть вспомогательные методы, которые обеспечивают более полезное представление различных объектов, чем их стандартные методы 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
?