Передать объект массива в атрибут
От: Коваленко Дмитрий Россия 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)

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