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