Короткий ответ - нет.
Более длинный ответ: для того чтобы класс поддерживал инициализаторы коллекций, ему необходимо реализовать IEnumerable и иметь метод add. Так, например:
public class MyClass<T,U> : IEnumerable<T>
{
public void Add(T t, U u)
{
}
public IEnumerator<T> GetEnumerator()
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Тогда я могу сделать это:
var mc = new MyClass<int, string> {{1, ""}, {2, ""}};
Итак, используя это, давайте попробуем заставить его работать для атрибута. (примечание: поскольку атрибуты не поддерживают обобщенные типы, я просто жестко кодирую их, используя строки для тестирования):
public class CollectionInitAttribute : Attribute, IEnumerable<string>
{
public void Add(string s1, string s2)
{
}
public IEnumerator<string> GetEnumerator()
{
throw new NotImplementedException();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
А теперь, чтобы проверить это:
[CollectionInit{{"1","1"}}]
public class MyClass
{
}
и это не компилируется :( Я не уверен, где именно ограничение, я предполагаю, что атрибуты не обновляются так же, как обычный объект, и поэтому это не поддерживается. быть любопытным, если это теоретически может быть поддержано будущей версией языка ....