0

我想限制 Collection 只有使用泛型的相同类型的类。

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 同时包含相同类型的TransactionLines 而不是PermTransactionLine一起TempTransactionLineTransactionLine必须是抽象的 - 不想直接创建对象。

我正在尝试添加new()约束但不起作用它说:

TransactionLine 必须具有公共无参数构造函数。

然后我使用 InvoiceLine 将其添加到发票中 - 最初我将所有类型的交易行放在一起作为计费运行的一部分,然后我将为特定交易类型创建发票。

任何想法,我怎么能做到这一点?

4

1 回答 1

0

你可以定义

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

并使用适合XXXInvoiceLine每个XXXTransactionLine.

T : new()在这种特殊情况下,没有必要定义约束。

于 2017-03-17T09:26:54.643 回答