Общее ограничение, чтобы ограничить коллекцию таким же типом производных объектов

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

public class InvoiceLine<T> where T : TransactionLine ,new() 
{

    private readonly IList<TransactionLine> _transactionLines = new List<TransactionLine>();
    public virtual IReadOnlyCollection<TransactionLine> TransactionLines => new ReadOnlyCollection<TransactionLine>(_transactionLines);

    public virtual void AddTransactionLine(TransactionLine transactionLine)
    {
        transactionLine.ThrowIfNull(nameof(transactionLine), "can't be null");
        _transactionLines.Add(transactionLine);
    }

    protected TransactionLine()
    {
        //doing some validation related stuff here.
    }

}

public abstract class TransactionLine : BaseEntity, IPeopleSoftCostCode, ICustomerAccountNumber
{
    public virtual InvoiceLine<TransactionLine> InvoiceLine { get; set; }
}

public class PermTransactionLine : TransactionLine
{

    public Perm Perm { get; set; }
}

 public class TempTransactionLine : TransactionLine
{
    public Temp Temp { get; set; }
}

я хочу иметь InvoiceLine.TransactionLines содержать тот же тип TransactionLineне PermTransactionLine а также TempTransactionLine вместе в то же время. TransactionLine должен быть абстрактным - не хочу создавать объект напрямую.

Я пытаюсь добавить new() согласен, но не работает, он говорит:

TransactionLine должен иметь открытый конструктор без параметров.

Затем я использую InvoiceLine, чтобы добавить его в счет-фактуру - изначально у меня есть все типы линий транзакций вместе в рамках биллингового прогона, а затем я буду создавать счета-фактуры для определенного типа транзакции.

Есть идеи, как мне этого добиться?

1 ответ

Вы можете определить

public class PermInvoiceLine : InvoiceLine<PermTransactionLine> { }
public class TempInvoiceLine : InvoiceLine<TempTransactionLine> { }

и использовать соответствующие XXXInvoiceLine для каждого XXXTransactionLine,

Нет смысла определять T : new() ограничение в этом конкретном случае.

Другие вопросы по тегам