gpt4 book ai didi

c# - 将受约束的泛型类型传递给非泛型方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:49 24 4
gpt4 key购买 nike

为什么我不能传递这个类的实例...

class Item<T> where T : Thing { }

...进入这个方法:

void DoSomething(Item<Thing> item);

因为我约束了Item<T>成为Item<Thing> ,在将我的元素发送到 DoSomething 之前转换应该是安全的- 但为什么框架不处理这个问题?

最佳答案

假设你有一个类:

public class SomeOtherThing : Thing { }

Item<SomeOtherThing>可以转换为 Item<Thing> .它们不一样。

让我们暂时假设该项目看起来像这样:

public class Item<T>
{
public T Value { get; set; }
}

DoSomething然后可能会做类似的事情:

void DoSomething(Item<Thing> item)
{
item.Value = new Thing();
}

如果你传入一个 Item<SomeOtherThing>DoSomething你现在刚刚分配了一个新的 ThingValue , 但值是 SomeOtherThing 类型的属性, 你不能设置 Thing反对它。这会破坏类型系统。编译器知道这是一个选项。因此(以及具有相同基本问题的任何其他操作)Item<SomeOtherThing>无法转换为 Item<Thing> .

那么,你能做什么?

好吧,如果你控制 DoSomething 的定义,也许它也应该是通用的。

如果DoSomething看起来像这样:

void DoSomething<T>(Item<T> item)
where T : Thing
{ }

然后你可以用 Item<SomeOtherThing> 调用它因为以前会导致问题的操作在 DoSomething 中不再有效.

关于c# - 将受约束的泛型类型传递给非泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14943216/

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