问题标签 [generics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
15941 浏览

c# - 为什么 C# 不支持类构造函数上的隐含泛型类型?

如果编译器可以推断,C# 不需要您指定泛型类型参数,例如:

这对于您不知道类型参数是什么的匿名类型是必需的(在智能感知中,它显示为'a),因为它是由编译器添加的。

类级类型参数不允许您这样做:

为什么 C# 不支持此类级别的泛型类型推断?

0 投票
2 回答
9702 浏览

c# - 如何在 C# 中对泛型类型指定多个约束?

对多种类型施加约束的语法是什么?基本示例:

我想在以下定义中对这两种类型进行约束,以便SpeciesType必须继承自Species并且OrderType必须继承自Order

0 投票
31 回答
704602 浏览

c# - 从列表中删除重复项在 C# 中

任何人都有在 C# 中对通用列表进行重复数据删除的快速方法吗?

0 投票
2 回答
4754 浏览

generics - Scala中的MultiMap

我正在尝试将MultiMap特征与HashMap这样的混合:

特征的定义MultiMap是:

这意味着 a MultiMapof types A&B是 a Mapof types A& Set[B],或者在我看来是这样。但是,编译器抱怨:

似乎泛型又让我绊倒了。

0 投票
6 回答
556 浏览

language-agnostic - 有没有实现泛型_well_的语言?

我喜欢泛型差异中的讨论,并且想知道是否有任何语言特别好地使用了这个特性。

我真的不喜欢 Java 的一些可以 Liskov 替代的List<? extends Foo>东西。为什么不能覆盖?ListFooList<Foo>

老实说,Comparable<? super Bar>

我也记不起为什么你永远不应该返回泛型数组:

我从不喜欢 C++ 中的模板,但这主要是因为没有一个编译器可以为它们吐出一个远程有意义的错误消息。有一次我实际上做了make realclean && make17 次来编译一些东西;我从来没有弄清楚为什么第 17 次是魅力。

那么,谁真正喜欢在他们的宠物语言中使用泛型呢?

0 投票
4 回答
39802 浏览

java - Java 泛型:将 Object o 的类与

假设我有以下课程:

我将如何检查o与 相同的课程E

我无法更改方法签名,(Object o)因为我正在覆盖超类,因此不要选择我的方法签名。

我也宁愿不尝试进行强制转换,然后在失败时捕获产生的异常。

0 投票
3 回答
1185 浏览

c# - 访问泛型对象的非泛型成员

有没有办法收集(例如在列表中)多个不共享公共超类的“通用”对象?如果是这样,我怎样才能访问它们的共同属性?

例如:

显然,这是伪代码,这是行不通的。

此外,我不需要访问 .Value 属性(因为那不是类型安全的)。

编辑:现在我一直在考虑这个,可以为此使用子类。但是,我认为这意味着我必须为每种新类型编写一个新的子类。


@Grzenio 是的,这完全回答了我的问题当然,现在我需要复制整个共享界面,但这不是什么大问题。我早该想到的...

@aku 你对鸭子打字是对的我不希望可以访问两种完全随机类型的对象。

但我认为泛型对象会共享某种通用接口,因为除了参数化的类型之外,它们完全相同。显然,这不是自动的情况。

0 投票
9 回答
132701 浏览

c# - Console.WriteLine 和通用列表

我经常发现自己在编写这样的代码:

最好是这样的:

我怀疑有一些聪明的方法可以做到这一点,但我没有看到。有没有人有比第一个块更好的解决方案?

0 投票
3 回答
5521 浏览

asp.net - 将泛型类与 ObjectDataSource 一起使用

我有一个要与 ObjectDataSource 一起使用的通用 Repository<T> 类。Repository<T> 位于一个名为 DataAccess 的单独项目中。根据MS 新闻组的这篇文章(相关部分复制如下):

在内部,ObjectDataSource 调用 Type.GetType(string) 来获取类型,因此我们需要遵循 Type.GetType 中记录的关于如何使用泛型获取类型的指南。您可以参考 MSDN Library on Type.GetType:

http://msdn2.microsoft.com/en-us/library/w3f99sx1.aspx

从文档中,您将了解到您需要使用反引号 (`) 来表示使用泛型的类型名称。

此外,这里我们必须在类型名称字符串中指定程序集名称。

因此,对于您的问题,答案是使用如下类型名称:

TypeName="TestObjectDataSourceAssembly.MyDataHandler`1[System.String],TestObjectDataSourceAssembly"

好吧,有道理。但是,当我尝试它时,页面会引发异常:

[InvalidOperationException:找不到 ObjectDataSource 'MyDataSource' 的 TypeName 属性中指定的类型。]

奇怪的是,这只发生在我查看页面时。当我从 VS2008 设计器打开“配置数据源”对话框时,它正确地向我显示了我的通用存储库类的方法。在调试时将 TypeName 字符串传递给 Type.GetType() 也会返回有效类型。那么给了什么?

0 投票
7 回答
304 浏览

c# - 从泛型类继承时需要 T 的列表或枚举数的建议

我知道答案不会很简单,而且我已经使用了几个(我认为丑陋的)结块。我只是在寻找一些优雅的答案。

抽象类:

孩子们:

是否有可能循环遍历 MyObjects 的集合(或其他类似的分组,通用或其他),然后使用MyObjects基类的ToList方法,因为此时我们不具体知道 T 的类型。

编辑 至于具体的例子,每当这个问题出现时,我已经考虑了一段时间,而是做了一些不同的事情,所以目前没有要求。但由于它经常出现,我想我会浮动它。

编辑 @Sara,这不是我关心的集合的具体类型,它可能是一个List,但每个实例的ToList方法仍然相对不可用,没有匿名类型)

@aku,是的,这个问题可能是相对假设的,但是能够检索并使用 T 对象列表,只知道它们的基本类型将非常有用。让 ToList 返回 BaseType 列表是我的解决方法之一

编辑@全部:到目前为止,这是我所希望的那种讨论,尽管它在很大程度上证实了我所怀疑的一切。到目前为止,谢谢大家,但其他任何人,请随时输入。

编辑@Rob,是的,它适用于已定义的类型,但不适用于该类型仅称为 IOtherObjects 列表。

@Rob再次感谢。这通常是我笨拙的解决方法(没有不尊重:))。或者使用 ConvertAll 函数通过委托进行向下转换。感谢您花时间了解问题。

合格的编辑,以防我有点困惑

更准确地说,(我可能让我最新的实现变得太复杂了):

假设我有 2 个对象类型,B 和 C 从对象 A 继承。

许多场景已经出现在哪里,从 B 列表或 C 列表,或者在其他情况下是其中之一的列表 - 但我不知道如果我在基类中,我需要一个不太具体的列表一种。

上面的例子是List Of Less Specific问题最新版本的一个淡化例子。

通常它已经呈现出来,因为我认为可能的场景会限制需要编写的代码量,并且看起来比其他选项更优雅一些。我真的很想讨论可能性和其他观点,我或多或少地得到了这些。我很惊讶到目前为止没有人提到 ConvertAll(),因为这是我使用的另一种解决方法,但对于手头的场景来说有点过于冗长

@Rob Yet Again和 Sara

谢谢,但是我确实觉得我理解泛型的所有静态上下文荣耀,并且确实理解了这里的问题。

我们系统的实际设计和泛型的使用(我可以这样说没有一点偏见,因为我只是设计中的参与者之一),已经做得很好。当我一直在使用核心 API 时,我发现我在错误的范围内简单地做某事,相反我不得不以比我喜欢的更不优雅的方式处理它们(尝试要么聪明或者可能是懒惰的——我会接受这些标签中的任何一个)。

我对我所说的 cludge 的厌恶主要是因为我们需要对记录集进行循环,只是为了将对象转换为它们的基本值,这可能会影响性能。

我想我想知道以前是否有人在他们的编码中遇到过这种情况,是否有人在处理它时比我更聪明,或者至少更优雅。