Foo 或 Foo 或您可能编写的任何其他内容-6ren">
gpt4 book ai didi

c# - 为什么 C# 不对泛型进行 "simple"类型推断?

转载 作者:太空狗 更新时间:2023-10-30 00:06:17 25 4
gpt4 key购买 nike

只是好奇:当然,我们都知道泛型的类型推断的一般情况是不可判定的。因此 C# 根本不会做任何类型的子类型:如果 Foo 是通用的,Foo 就不是 的子类型>Foo Foo 或您可能编写的任何其他内容。当然,我们都使用丑陋的接口(interface)或抽象类定义来解决这个问题。

但是...如果您无法解决一般问题,为什么不将解决方案限制在简单的情况下。例如,在我上面的列表中,很明显 Foo Foo 的子类型,检查起来很简单。与检查 Foo 相同。

那么,如果他们只是说,噢,见鬼,我们会尽力而为,是否还有其他深渊会从深渊中爬出来?或者这只是 Microsoft 的语言人员的某种宗教纯洁性?


更新:

这是一个非常古老的话题。这些天,C# 有 var,它解决了我提示的一半,然后使用匿名委托(delegate)的 Linq 风格,有一个很好的符号,不需要输入相同的东西两次。因此,我反对的每个方面都已通过最近对 C# 的更改得到解决(或者可能只是花了我一段时间来了解我发布线程时刚刚引入的东西......)我使用这些新的Isis2 系统中的功能现在用于可靠的云计算 (isis2.codeplex.com),因此我认为该库具有非常干净的外观和感觉。检查一下,让我知道您的想法)。 -- 肯·伯曼(2014 年 7 月)

最佳答案

他们已经解决了很多“简单”的情况:C# 4.0 支持 covariance and contravariance对于接口(interface)和委托(delegate)中的泛型类型参数。但不幸的是没有上课。

解决此限制相当容易:

List<Foo> foos = bars.Select(bar => (Foo)bar).ToList();

关于c# - 为什么 C# 不对泛型进行 "simple"类型推断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503603/

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