Соглашение при использовании вспомогательных функций приведения - PullRequest
3 голосов
/ 17 мая 2010

Я недавно начал использовать функции, чтобы упростить наложение пальцев, в одном случае у меня было что-то вроде этого

((Dictionary<string,string>)value).Add(foo);

и преобразовал его в крошечную вспомогательную функцию, чтобы я мог сделать это

ToDictionary(value).Add(foo);

Это против стандартов кодирования?

А как насчет простых примеров? Например, в моем скриптовом движке я подумал сделать что-то вроде этого

((StringVariable)arg).Value="foo";

1012 * быть *

ToStringVar(arg).Value="foo";

Мне действительно просто не нравится, как по порядку присваивать значение и мгновенно получать от него свойство, вы должны заключить его в двойные скобки. У меня такое чувство, что последний намного хуже первого, хотя

Ответы [ 3 ]

4 голосов
/ 17 мая 2010

На мгновение не обращая внимания на то, что вам, возможно, понадобится выполнить этот кастинг - в чем я лично сомневаюсь - если вы действительно просто хотите «спасти свои пальцы», вы можете использовать оператор using для сокращения имени ваших универсальных типов. .

В верхней части вашего файла, со всеми другими использованиями:

using ShorterType = Dictionary<string, Dictionary<int, List<Dictionary<OtherType, ThisIsRidiculous>>>>;
1 голос
/ 17 мая 2010

Я так не думаю. Вы также сделали что-то приятное в том, что немного легче читать и видеть, что происходит. Glib (в C) предоставляет макросы для своих классов, так что это не новая концепция. Только не переусердствуйте, пытаясь спасти свои пальцы.

0 голосов
/ 17 мая 2010

В общем, я бы посчитал это запахом кода. В большинстве ситуаций, когда необходим тип приведенного вами приведения, вы можете получить такое же поведение при правильном использовании интерфейсов (Java) или виртуального наследования (C ++) в дополнение к шаблонам / шаблонам. Гораздо безопаснее оставить ответственность за управление типами компилятору, чем пытаться управлять им самостоятельно.

Без дополнительного контекста трудно сказать о приведенном вами примере. Конечно, есть ситуации, в которых тип каста, который вы описываете, неизбежен; но они скорее исключение, чем правило. Например, тип приведения (и связанные вспомогательные функции / макросы), который вы описываете, чрезвычайно распространен в универсальных библиотеках языка Си.

...