下面的代碼...如何在泛型類聲明中使用泛型?
class Repository<T> where T : Func<TIn, TOut>
{
//...
}
導致VS抱怨「的類型或命名空間名稱‘錫’/‘吹捧’不能被發現。」
有沒有辦法做到這一點?
下面的代碼...如何在泛型類聲明中使用泛型?
class Repository<T> where T : Func<TIn, TOut>
{
//...
}
導致VS抱怨「的類型或命名空間名稱‘錫’/‘吹捧’不能被發現。」
有沒有辦法做到這一點?
如果Func
本身是一個通用類,然後是你可以通過:
class Repository<T, TIn, TOut> where T: Func<TIn, TOut>
但是,你不能用Func
做到這一點,因爲它只能通過一個接口/非密封類受到約束或一個類型參數。
作爲替代方案,你可以通過Func
在構造函數參數,它將工作即
class Repository<TIn, TOut>
{
public Repository(Func<TIn, TOut> func)
{
...
}
}
不是真的知道這會給你你雖然之後在做什麼。
您必須在類的定義指定TIn
和TOut
的「投入」,否則,編譯器不會從那裏拿了那
class Repository<T, TIn, TOut> where T : Func<TIn, TOut>
{
//...
}
你不能約束一個類型弄清楚T
到Func,因爲你只能將類型約束到接口,非密封類或類型參數。
如果可以做到這一點,就應該是這樣的:
class Repository<T, TIn, Tout> where T: Func<TIn, TOut>
{
//...
}
但你不能約束到Func<>
,所以整個事情是註定的。
從編譯器中的錯誤信息是:
錯誤1 'System.Func' 是不是一個有效約束。用作約束的類型必須是接口,非密封類或類型參數。
由於您已經知道您想要的類型,因此不需要對其進行約束。 我想你想要的是這樣的:
class Repository<TIn, TOut>
{
public void someMethod(Func<TIn, TOut> func)
{
}
}
這看起來像答案。 – 2013-05-13 12:19:19
你不能約束一個類型'T'到'Func鍵'因爲你canonly約束類型接口,非密封類或類型。 –
2013-05-13 11:57:40
Func是一種類型 –
Kenneth
2013-05-13 11:59:46
@Kenneth對不起,應該說「類型參數」不只是「類型」 – 2013-05-13 12:04:49