[VS, плагин] Долго ли написать? проверка параметра на этапе компиляции
Если речь о шарпе, то вижуальная студия для написания такого не нужна, вообще-то. Ну то есть находишь сурцы рефлектора (или сам разбираешься после чего делаешь всё что угодно.
Если сделать "всё что угодно" хорошо, то можно получить что-нить X-Sharp (или как эта приблуда называлась, не помню) с ценой порядка 500 баксов за копию.
А enum не судьба сделать вместо string?
Ctrl+Shift+Space влом нажимать?
X-Sharpа можно поточнее ссылочку на это
Ctrl+Shift+Space влом нажимать?по-моему я не про то
А enum не судьба сделать вместо string?списки констант изначально находится во внешнем источнике, можно генерировать автоматически константы
const string Ivanov = "Иванов"
мы сейчас примерно так и поступаем, но это не очень удобно, появляется какое то лишнее звено
Плагин решал бы эту проблему более изящно.
Основная сложность - это парсинг и анализ.
C#-парсеры видел несколько в инете, есть более-менее работающий парсер в R#.
const string Иванов = "Иванов";
Но так писать не надо, так пишут тупые насильники. Писать нужно так:
enum Name
{
Иванов,
Петров,
Сидоров,
}
string NameToString(Name name)
{
return Enum.GetName(typeof(Name name);
}
Это если код пишется руками.
Если код генерится, то лучше все-таки так:
class Сотрудники
{
public const string Иванов_И_И = "Иванов И. И.";
public const string Петров_К_Л = "Иванов К. Л.";
public static string[] Все = new string[]
{
Иванов_И_И,
Петров_К_Л
};
};
Но так писать не надо, так пишут тупые насильники. Писать нужно так:а вызовы будут так выглядеть
MyClass.Иванов
по-моему первое гораздо симпатишнее
MyClass.NameToString(Name.Иванов)
По-моему, enum лучше чем массив. Ты свой массив вообще использовать как собираешься? Я вот не представляю, что с ним можно сделать. Так что остаются константы, а про константы уже неоднократно было сказано, что они - зло.
В крайнем случае можно сделать енум как у меня, а потом в NameToString сделать выборку из такого же массива как у тебя (только в нём имена с точками и пробелами). Вот.
Ну не знаю, короче. Вопрос вкуса =)
Потому что target-функция все равно принимает string.
Соответственно непонятно: где тогда будет использоваться enum, и куда девать тормоза при переводе из enum-а в строку?
Почему? Разве было какое-то обсуждение с такими выводами?
Ну хз словом. Если ты константы заныкаешь в каком-нить классе - тогда да, пожалуй достаточно удобно получится.
Основная сложность - это парсинг и анализ.а пространство имен System.CodeDom для этого нельзя заюзать?
кто-нибудь его использовал?
там нет парсера
Основная сложность - это парсинг и анализ.Да не нужно никакого парсера, студия постоянно код в распарсеном состоянии хранит, чтобы синтаксические ошибки подсвечивать, надо именно плагин писать, пусть он вообще, не во время Build ругается, а сразу когда набираешь - подсвечивает.
По любому, опыт "написать плагин к студии" в сто раз ценнее опыта "найти парсер C# и в нем копаться"!
А ещё можно выдирать из сборки непосредственно мсил, причём средствами шарпа, причём из уже загруженной, я точно знаю. Могу узнать как.
Разрюхать плагиновое АПИ для вижуальника - это, конечно, прикольно, но к данной задаче неприменимо. Ну то есть бессмысленно это ИМХО, лучше пройтись по уже готовой ассебли в пост-билд степе.
А чо типа, переписать всё на енумы и обернуть все функции, требующие контроля, в обёртки, принимающие енумы (да, я именно поэтому хотел енумы, я вспомнил!) не поможет? Прекрасное средство, и даже в рамках парадигмы.
//Fj
Именно там парсера и нет.
http://rsdn.ru/Forum/?mid=447694
> А ещё можно выдирать из сборки непосредственно мсил
С текстом, до компиляции, работать намного проще, т.к. в msil-е часть данных уже теряется по отношению к исходнику.
лучше пройтись по уже готовой ассебли в пост-билд степеИ что сделать-то?
Там даже вызов функции явно не провязан с параметрами, нужно IL интерпретировать, чтобы разобрать, что к чему относится. Я уже молчу о том, что System.Reflection _не_ обеспечивает доступ к коду, а только к метаданным, придется что-то доморощенное искать... Зачем говорить, если не знаешь
Оставить комментарий
6yrop
плагин к Visual Studio.Net, который выполняет следующее. При нажатии кнопки Build происходит проверка доступных значений аргумента метода.Есть метод void SomeMethod(string arg). Его вызывают указывая строковую константу SomeMethod(“Иванов”). Где-нибудь (например, в текстовом файле) храниться список допустимых значений аргумента arg. Плагин должен проверять, не опечатался ли кодировщик.