我想限制 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
同时包含相同类型的TransactionLine
s 而不是PermTransactionLine
一起TempTransactionLine
。TransactionLine
必须是抽象的 - 不想直接创建对象。
我正在尝试添加new()
约束但不起作用它说:
TransactionLine 必须具有公共无参数构造函数。
然后我使用 InvoiceLine 将其添加到发票中 - 最初我将所有类型的交易行放在一起作为计费运行的一部分,然后我将为特定交易类型创建发票。
任何想法,我怎么能做到这一点?