如何解决泛型错误 CS0311?
How to solve generics error CS0311?
我在网上和 Whosebug 上进行了搜索,发现了很多处理 CS0311 错误的帖子。 None 的场景与我的很接近。我有一个通用 class 继承自通用 class.
请注意 BusinessBase
是 CSLA
框架中的 class
我错过了什么?
public interface Itest
{
int Digit();
}
class BB : Itest
{
public int Digit()
{
return 20;
}
}
class Test<T> : BusinessBase<T>, Itest where T : Test<T>, Itest
{
public int Digit()
{
return 30;
}
}
Test<Itest> test = new Test<Itest>(); //error CS0311
Error CS0311 The type 'MyTestApp.Itest'
cannot be used as type parameter 'T'
in the generic type or method 'A<T>'
. There is no implicit reference conversion from 'MyTestApp.Itest'
to 'MyTestApp.A<MyTestApp.Itest>'
. MyTestApp
我同意编译器。 T
在您的场景中是 Itest
。您的 where
条件要求 T : Test<T>
(听起来很可疑),这将需要 ITest : Test<ITest>
... 但是 ITest
显然没有(也不能): Test<ITest>
.
非常不清楚你打算做什么,但我怀疑你的意思是:
class Test<T> where T : Itest
和:
Test<BB> test = new Test<BB>();
你可以这样做:
interface Itest {}
class BusinessBase<T> {
}
class Test<T> : BusinessBase<T>, Itest where T : Test<T>, Itest {
public int Digit() {
return 30;
}
}
class IT : Test<IT>, Itest {
}
class Program {
public static int Main() {
var t = new Test<IT>();
t.Digit();
return 0;
}
}
对我来说,泛型的使用非常糟糕,但这就是 CSLA 的工作方式....
我在网上和 Whosebug 上进行了搜索,发现了很多处理 CS0311 错误的帖子。 None 的场景与我的很接近。我有一个通用 class 继承自通用 class.
请注意 BusinessBase
是 CSLA
框架中的 class
我错过了什么?
public interface Itest
{
int Digit();
}
class BB : Itest
{
public int Digit()
{
return 20;
}
}
class Test<T> : BusinessBase<T>, Itest where T : Test<T>, Itest
{
public int Digit()
{
return 30;
}
}
Test<Itest> test = new Test<Itest>(); //error CS0311
Error CS0311 The type
'MyTestApp.Itest'
cannot be used as type parameter'T'
in the generic type or method'A<T>'
. There is no implicit reference conversion from'MyTestApp.Itest'
to'MyTestApp.A<MyTestApp.Itest>'
. MyTestApp
我同意编译器。 T
在您的场景中是 Itest
。您的 where
条件要求 T : Test<T>
(听起来很可疑),这将需要 ITest : Test<ITest>
... 但是 ITest
显然没有(也不能): Test<ITest>
.
非常不清楚你打算做什么,但我怀疑你的意思是:
class Test<T> where T : Itest
和:
Test<BB> test = new Test<BB>();
你可以这样做:
interface Itest {}
class BusinessBase<T> {
}
class Test<T> : BusinessBase<T>, Itest where T : Test<T>, Itest {
public int Digit() {
return 30;
}
}
class IT : Test<IT>, Itest {
}
class Program {
public static int Main() {
var t = new Test<IT>();
t.Digit();
return 0;
}
}
对我来说,泛型的使用非常糟糕,但这就是 CSLA 的工作方式....