gpt4 book ai didi

c# - C# 中泛型 Lazy 类的协变使用

转载 作者:太空狗 更新时间:2023-10-29 23:58:08 24 4
gpt4 key购买 nike

假设这适用:

public class Cat : Animal { }

假设我有一个方法:

public void Feed(Animal animal) { ... }

我可以这样调用它:

var animal = new Cat();
Feed(animal);

Feed 时我怎样才能让它工作?重构为仅支持 Lazy<Animal>作为参数?我想传递我的 var lazyAnimal = new Lazy<Cat>();不知何故。

这显然行不通:

var lazyAnimal = new Lazy<Cat>();
Feed(lazyAnimal);

最佳答案

你不能,基本上 - 无论如何不能直接。 Lazy<T>是一个类,所以不假设泛型方差。

可以创建自己的ILazy<out T>接口(interface),使用实现它 Lazy<T> , 然后制作 FeedILazy<Animal>反而。实现将是微不足道的。

或者,您可以制作 Feed通用:

public void Feed<T>(Lazy<T> animal) where T : Animal

或者Servy的建议采取Func<Animal>也可以,您可以使用 Lazy<T> 的 lambda 表达式来调用它:

Feed(() => lazyAnimal.Value);

关于c# - C# 中泛型 Lazy 类的协变使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21117619/

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