[英]compile time error occurs when converting an extension method into a generic method
[英]Generic method compile time error
如下代碼:
private IList<T> DoStuff<T>()
{
IList<T> res = new List<T>();
for (int i = 0; i < 10; i++)
{
T item = DoOtherStuff<T>();
res.Add(item);
}
return res;
}
private T DoOtherStuff<T>() where T : new()
{
return new T();
}
產生以下錯誤:
“ T”必須是具有公共無參數構造函數的非抽象類型,以便在通用類型或方法“ DoOtherStuff()”中將其用作參數“ T”
請有人解釋為什么?
更改
private IList<T> DoStuff<T>()
至
private IList<T> DoStuff<T>() where T : new()
因為否則您將無法保證T
具有new()
構造函數。
您的DoOtherStuff<T>
方法具有where T : new()
約束。 (也就是說,“ T
必須是具有公共無參數構造函數的非抽象類型”。)
您的DoStuff<T>
方法沒有該約束,這意味着編譯器無法保證可以合法用於DoStuff
所有類型參數T
都將滿足DoOtherStuff
所需的where T : new()
約束。
DoOtherStuff
的T
指定T : new()
,這意味着它具有一個公共的無參數構造函數。 DoStuff
的T
沒有限制,因此您可能無法說出new T()
。 您應該where T : new()
做DoStuff
where T : new()
添加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.