问题标签 [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 投票
4 回答
402 浏览

.net - 有没有一种优雅的方法来实例化带有参数的变量类型?

这是不合法的:

为此,您必须对 T 的类型对象进行一些反思,或者您必须使用 Activator.CreateInstance。两个都很恶心。有没有更好的办法?

0 投票
10 回答
1155 浏览

c++ - 用于以通用方式返回序列的 C++ API

如果我正在编写一个库并且我有一个需要返回一系列值的函数,我可以执行以下操作:

但是,这要求库用户使用 std::vector<> 容器,而不是允许他们使用他们想要使用的任何容器。此外,它可以添加返回数组的额外副本(取决于编译器是否可以优化它),这可能会对性能产生负面影响。

理论上,您可以通过制作一个带有开始和结束迭代器的模板化函数来启用任意容器的使用(并避免不必要的额外复制):

然后该函数会将序列值存储在迭代器给定的范围内。但是这样做的问题是它需要您知道序列的大小,以便在序列之间有足够的元素beginend存储序列中的所有值。

我想到了一个界面,例如:

这要求 T_insertIter 是一个插入迭代器(例如,使用 创建std::back_inserter(my_vector)),但这似乎太容易误用,因为编译器会很乐意接受非插入迭代器,但在运行时会表现不正确。

那么设计返回任意长度序列的通用接口是否有最佳实践?

0 投票
3 回答
509 浏览

c# - C#“通用”类型问题

C# 问题 (.net 3.5)。我有一个类 ImageData,它有一个字段 ushort[,] 像素。我正在处理专有图像格式。ImageData 类在构造函数中获取文件位置,然后打开文件扩展名以确定如何解码。在几个图像文件中,标题中有一个“位深度”字段。在我解码标题后,我将像素值读入“像素”数组。到目前为止,我没有超过 16bpp,所以我没事。但是如果我有 32bpp 怎么办?

我想要做的是在运行时确定像素的类型。我想在从标头中读取位深度之后并将像素数据复制到内存中之前执行此操作。有任何想法吗?

0 投票
6 回答
1364 浏览

c# - 如何从继承自 CollectionBase 的类重构为泛型?

我正在开发一个大约 250,000 行代码的应用程序。我目前是唯一一个开发这个最初在 .NET 1.1 中构建的应用程序的开发人员。Pervasive through 是一个继承自 CollectionBase 的类。所有数据库集合都继承自此类。我正在考虑重构以从通用集合 List 继承。不用说,Martin Fowler 的重构书没有任何建议。我应该尝试这个重构吗?如果是这样,解决此重构的最佳方法是什么?

是的,自始至终都有单元测试,但没有 QA 团队。

0 投票
15 回答
2040 浏览

c# - 为什么 C# 和 VB 都有泛型?他们提供什么好处?泛型,FTW

来自维基百科

泛型编程是一种计算机编程风格,其中算法根据待指定的类型编写,然后在需要时为作为参数提供的特定类型实例化,由 1983 年出现的 Ada 首创。这种方法允许编写常见的函数或类型仅在使用时它们所操作的类型集不同,从而减少了重复。

泛型提供了定义稍后指定的类型的能力。您不必将项目转换为类型来使用它们,因为它们已经被键入。

为什么 C# 和 VB 都有泛型?他们提供什么好处?您发现使用它们有什么好处?

还有哪些其他语言也有泛型?

0 投票
16 回答
13397 浏览

c# - 在 C# 中使用一对(三重等)值作为一个值的最佳方法是什么?

也就是说,我想要一个值的元组。

我心目中的用例:

或者

是否有内置类型,如 Pair 或 Triple?或者实现它的最佳方式是什么?

更新答案中描述了一些通用的元组实现,但是对于用作字典中的键的元组,您应该额外验证哈希码的正确计算。在另一个问题中对此有更多信息。

更新 2我想还值得提醒的是,当您使用某个值作为字典中的键时,它应该是不可变的。

0 投票
10 回答
18888 浏览

java - 为什么 Java 集合不删除通用方法?

为什么Collection.remove(Object o)不是通用的?

好像Collection<E>可以有boolean remove(E o);

然后,当您不小心尝试从 a 中删除(例如)Set<String>而不是每个单独的 String 时Collection<String>,这将是编译时错误,而不是稍后的调试问题。

0 投票
12 回答
267792 浏览

java - 如何找出每个对象在 ArrayList 中的类型?

I have a ArrayList made up of different elements imported from a db, made up of strings, numbers, doubles and ints. Is there a way to use a reflection type technique to find out what each type of data ea

I have a ArrayList made up of different elements imported from a db, made up of strings, numbers, doubles and ints. Is there a way to use a reflection type technique to find out what each type of data each element holds?

FYI: The reason that there is so many types of data is that this is a piece of java code being written to be implemented with different DB's.


Just call .getClass() on each Object in a loop.

Unfortunately, Java doesn't have map(). :)

0 投票
4 回答
13487 浏览

.net - 为什么 .NET 中没有通用同步队列?

我注意到您可以调用 Queue.Synchronize 来获取线程安全的队列对象,但同样的方法在 Queue<T> 上不可用。有谁知道为什么?似乎有点奇怪。

0 投票
5 回答
3715 浏览

c# - linq 等效于通用函数的'select *' sql?

我有一个通用<> 函数,它接受一个 linq 查询('items')并通过它枚举添加额外的属性。如何选择原始“项目”的所有属性而不是项目本身(如下面的代码)?

所以等价于sql: select *, 'bar' as Foo from items