К сожалению, это запрещено в C #. У вас может быть ограничение new ()
, которое заставляет тип иметь конструктор по умолчанию, но это единственное ограничение, связанное с конструктором, поддерживаемое .NET.
Ваш лучший вариант, вероятно, - определить интерфейс, который вы можете использовать, и ограничить его. Вместо того, чтобы пытаться установить объект при создании, вы можете использовать метод стиля «Initialize», который принимает объект «A» и вызывает его.
Вы не можете ограничить конструкторы универсального типа таким образом (только для того, чтобы потребовать конструктор без параметров), но вы можете взять делегата для выполнения конструкции:
public static IList<T> ConvertTo<A, T>(this IEnumerable<A> list, Func<A, T> constructionFunc)
{
return list.Select(constructionFunc).ToList();
}
И использовать его следующим образом:
var IList<T> converted = someSequence.ConvertTo(a => new T(a));