gpt4 book ai didi

C# 泛型 : using class generic in where clause of method generic

转载 作者:太空狗 更新时间:2023-10-29 22:33:33 25 4
gpt4 key购买 nike

谁能解释为什么这不可能(至少在 .Net 2.0 中):

public class A<T>
{
public void Method<U>() where U : T
{
...
}
}

...

A<K> obj = new A<K>();
obj.Method<J>();

K是J的父类(super class)

编辑

我试图简化问题以使问题更清晰,但我显然做得过头了。对不起!

我想我的问题更具体一些。这是我的代码(基于 this ):

public class Container<T>
{
private static class PerType<U> where U : T
{
public static U item;
}

public U Get<U>() where U : T
{
return PerType<U>.item;
}

public void Set<U>(U newItem) where U : T
{
PerType<U>.item = newItem;
}
}

我收到了这个错误:

Container.cs(13,24): error CS0305: Using the generic type Container<T>.PerType<U>' requires2' type argument(s)

最佳答案

其实是可以的。这段代码编译并运行得很好:

public class A<T>
{
public void Act<U>() where U : T
{
Console.Write("a");
}
}

static void Main(string[] args)
{
A<IEnumerable> a = new A<IEnumerable>();
a.Act<List<int>>();
}

如解释的那样,在泛型中使用协变/逆变是不可能的 here :

IEnumerable<Derived> d = new List<Derived>();
IEnumerable<Base> b = d;

关于C# 泛型 : using class generic in where clause of method generic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10885260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com