可以执行以下操作吗(如果可以的话,我好像无法使其工作...暂时放弃约束)...
如果类型是推断出来的,问题在哪里?
private void GetGenericTableContent<T>(ref StringBuilder outputTableContent, T item)
{
outputTableContent.Append("<td>" + item.SpreadsheetLineNumbers + "</td>");
}
// 'item' is either DuplicateSpreadsheetRowModel class or SpreadsheetRowModel class
使用上述代码后,我得到了以下错误:
“T”不包含“SpreadsheetLineNumbers”的定义,也没有接受类型为“T”的第一个参数的扩展方法“SpreadsheetLineNumbers”(您是否缺少使用指令或程序集引用?)
GetGenericTableContent(someStringBuilder, 42)
,其中T = int
,这样才能被调用。显然,这会失败,因为int
没有成员SpreadsheetLineNumbers
,所以 C# 正确地拒绝了你的代码。这就是约束的全部意义所在。 - Konrad RudolphGetGenericTableContent
方法声称适用于任何类型T
,但它实际上只能应用于具有适当的SpreadsheetLineNumbers
属性的类型。描述这种类型的方法是在T
上添加一个基类或接口约束,以指定所需的成员。 - Lee