Передать объект массива в атрибут
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 26.11.17 18:43
Оценка:
Есть проект, не будем на него показывать пальцем, в котором присутствует такой код
[Test, IncludeDataContextSource(ProviderName.SqlServer2005)] public void Sql2005          (string ctx) { RunScript(ctx,          "\nGO\n",  "SqlServer");     }
[Test, IncludeDataContextSource(ProviderName.SqlServer2008)] public void Sql2008          (string ctx) { RunScript(ctx,          "\nGO\n",  "SqlServer");     }
[Test, IncludeDataContextSource(ProviderName.SqlServer2012)] public void Sql2012          (string ctx) { RunScript(ctx,          "\nGO\n",  "SqlServer");     }
[Test, IncludeDataContextSource(ProviderName.SqlServer2014)] public void Sql2014          (string ctx) { RunScript(ctx,          "\nGO\n",  "SqlServer");     }
[Test, IncludeDataContextSource(TestProvName.SqlAzure)]      public void SqlAzure2012     (string ctx) { RunScript(ctx,          "\nGO\n",  "SqlServer");     }

IncludeDataContextSource позволяет указать через запятую аргументы. То есть можно было бы написать
[Test, IncludeDataContextSource(ProviderName.SqlServer2005,ProviderName.SqlServer2008, ..., TestProvName.SqlAzure)]
public void MsSql          (string ctx) { RunScript(ctx,          "\nGO\n",  "SqlServer");     }

Но это не интересно.

Хотелось бы сформировать отдельно массив с названиями и подсовывать в атрибут этот массив.
public static readonly string[] MsSql_Set001={ProviderName.SqlServer2005,ProviderName.SqlServer2008, ..., TestProvName.SqlAzure};

Потом этот массив можно было бы втыкивать в атрибуты других методов.
[Test, IncludeDataContextSource(MsSql_Set001)]
public void MsSql          (string ctx) { RunScript(ctx,          "\nGO\n",  "SqlServer");     }

Но сделать это не получается:

Error CS0182 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type Tests(netcoreapp2.0)

Собственно вопрос — какого такую полезную штуку до сих пор не поддерживают?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: Передать объект массива в атрибут
От: VladCore  
Дата: 27.11.17 06:58
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Есть проект, не будем на него показывать пальцем,


Шарепоинт?

P.S.

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

Потому использовать ваши статические мемберы как бы не хотелось в конструкторе увы нельзя.

Это с первого дотнета вроде так повелось.
Отредактировано 27.11.2017 7:17 VladCore . Предыдущая версия . Еще …
Отредактировано 27.11.2017 7:08 VladCore . Предыдущая версия .
Отредактировано 27.11.2017 7:05 VladCore . Предыдущая версия .
Отредактировано 27.11.2017 7:04 VladCore . Предыдущая версия .
Отредактировано 27.11.2017 7:01 VladCore . Предыдущая версия .
Re[2]: Передать объект массива в атрибут
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 27.11.17 07:15
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>>Есть проект, не будем на него показывать пальцем,


VC>Шарепоинт?


Нет
Автор: Коваленко Дмитрий
Дата: 26.11.17


VC>Конструктры атрибутов, в отличие от всех остальных конструкторов, вызываются при компиляции а не при джитте, пока весь код не скомпилен.

VC>Потому использовать статические мемберы как бы не хотелось в конструкторе увы нельзя.
VC>Это с первого дотнета вроде так повелось.

Да понятно.

Я вот подумал — всякие такие ограничения включают моск для поиска обходных путей. Которые, зачастую, оказываются даже лучше
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.