我想限制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
,而不是PermTransactionLine
和TempTransactionLine
在同一时间。 TransactionLine
必须是抽象的 - 不想直接创建对象。
我正在尝试添加new()
constaint,但它没有工作说:
TransactionLine必须具有公共无参数构造函数。
然后我使用InvoiceLine将其添加到发票中 - 最初我将所有类型的交易行一起作为计费运行的一部分,然后我将为特定交易类型创建发票。
任何想法,我怎么能做到这一点?
答案 0 :(得分:0)
您可以定义
public class PermInvoiceLine : InvoiceLine<PermTransactionLine> { }
public class TempInvoiceLine : InvoiceLine<TempTransactionLine> { }
并为每个XXXInvoiceLine
使用适当的XXXTransactionLine
。
在这种特殊情况下,没有必要定义T : new()
约束。