问题标签 [type-constraints]

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 投票
2 回答
9702 浏览

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

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

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

0 投票
6 回答
60056 浏览

c# - 如何定义基本类型的泛型类型限制?

我有以下泛型类型的方法:

我想将 T 限制为原始类型,例如 int、string、float 但不是类类型。我知道我可以为这样的类类型定义泛型:

我不确定原始类型是否可能以及如何。

0 投票
3 回答
613 浏览

c# - 什么时候应该或不应该使用泛型类型约束?

我有一个基类:

和两个派生类

好的,现在说我有一个项目列表:

我希望他们都调用他们的 DoSomething() 方法。我可以期望只迭代列表并调用他们的 DoSomething() 方法,所以假设我有一个名为 AllDoSomething() 的方法,它只是迭代列表并完成工作:

以下方法的实际区别是什么?

这两种方法虽然在语法上有所不同,但实际上都是在做同样的事情。

它们只是做同一件事的不同方式吗?我了解泛型和类型约束,但不明白为什么在这种情况下我会使用一种方式而不是另一种方式。

0 投票
3 回答
406 浏览

c# - C#:如何查找和创建满足多种类型约束的实例

假设我有一个具有多种类型约束的通用方法,这个:

现在....我怎样才能使用反射创建可以发送到那里的东西?

如果这只是一个约束,我知道我可以这样做:

但是,不能真正投射到多个接口......我到底该如何解决这个问题?你可以说我现在几乎迷路了:P

标题有点长而复杂,因为我不知道该怎么称呼它,如果可以的话,请改进

0 投票
4 回答
1608 浏览

generics - 特定泛型类型的扩展方法

我正在尝试为绑定到F# 中特定泛型类型参数的泛型类型创建各种扩展方法,但该语言似乎不允许我:

我想做的是如下所示:

然而它给了我编译器错误(在int关键字下划线):

类型名称中有意外的标识符。预期的中缀运算符、引号符号或其他标记。

以下确实有效,尽管它没有int像我想要的那样专门将泛型类型参数绑定到:

有什么方法可以在 F# 中实现这一目标 - 我可能只是使用了错误的语法吗?如果没有,如果有人可以提出解决方法,我将不胜感激,也许在某处使用类型约束。

0 投票
2 回答
37945 浏览

c# - 具有“任何泛型类型”定义的 C# 泛型“where 约束”?

让我举个例子:

  1. 我有一些通用类/接口定义:

    interface IGenericCar< T > {...}

  2. 我有另一个类/接口,我想与上面的类相关,例如:

    interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}

基本上,我希望我的通用 IGarrage 依赖于IGenericCar,无论它是IGenericCar<int>还是IGenericCar<System.Color>,因为我对该类型没有任何依赖关系。

0 投票
3 回答
3105 浏览

c# - 术语“裸类型约束”指的是什么?

最近我在泛型的上下文中阅读了一个术语“裸类型约束”。这是什么意思?我们在哪里使用它?

0 投票
4 回答
3141 浏览

c# - 非严格的多接口类型参数约束?

对不起,如果这是一个骗局,但我似乎无法获得正确的关键字组合来过滤掉各种类型约束和泛型问题(因为有很多)。

我有两个接口——我们称它们为IOnlineIOffline

它们密切相关,因为它们描述了几乎相同的合约,但它们之间的主要区别之一是使用具体实现的上下文。这不完全是我的情况,但它很好地说明了这个问题。

然后我有一些方法可以针对这些接口的具体实现者工作。有时这些方法只想处理一种类型而不是另一种。

很简单:

踢球者正在实现可以在 EITHER 类型上运行的方法的代码。我认为这是正确的,但是在阅读编译错误时,我期望约束将被解释为“如果它们实现 IOnline 或 IOffline,则允许在此处一般使用任何类型 T”,实际上被解释为“允许任何类型如果他们实现了 BOTH,则此处一般使用 T”。

尝试实现两个具有相同名称但不同约束的单独方法会失败,因为存在明显的歧义问题——我们没有重载,因为参数列表是相同的(因为所需的行为是相同的)。

可以为两种不同的方法使用两个不同的名称,每种方法都有适当的约束,但这看起来很笨拙,并且使下游的其他事情变得很麻烦……可行,但并不理想。

我觉得这里一定有一些我想念的东西......我在普通的土地上感觉非常舒服,但这是我第一次必须完成我所追求的事情,我觉得我只是在旋转我的轮子大气压。

0 投票
4 回答
909 浏览

haskell - 为什么 Haskell 没有在函数签名中推断数据类型的类型类?

首先,这个问题不是 100% 特定于 Haskell,请随意评论类型类、接口和类型的一般设计。

我正在阅读LYAH - 创建类型和类型类以下是我正在寻找更多信息的段落:

然而,在 Haskell 中,永远不要在数据声明中添加类型类约束是一个非常严格的约定。为什么?好吧,因为我们没有得到很多好处,但是我们最终会编写更多的类约束,即使我们不需要它们。如果我们在 Map kv 的数据声明中放置或不放置 Ord k 约束,我们将不得不将约束放入假定映射中的键可以排序的函数中。但是如果我们不把约束放在数据声明中,我们就不必把 (Ord k) => 放在不关心键是否可以排序的函数的类型声明中。此类函数的一个示例是 toList,它只接受一个映射并将其转换为关联列表。它的类型签名是 toList :: Map ka -> [(k, a)]。

乍一看,这似乎是合乎逻辑的——但是将类型类附加到类型上没有好处吗?如果类型类是类型的行为,那么为什么要通过使用类型(通过函数)而不是类型本身来定义行为?我认为有一些元编程可以利用它,它肯定是很好的描述性代码文档。相反,这在其他语言中会是一个好主意吗?在方法上指定对象应符合的接口是否理想,这样如果调用者不使用该方法,则对象不必符合接口?此外,为什么 Haskell 不能推断出使用 type 的函数Foo必须引入 type 声明中标识的 typeclass 约束Foo?是否有编译指示可以启用此功能?

我第一次阅读它时,它让人联想到“这是一个黑客(或解决方法)响应”。在第二次阅读时稍加思考,这听起来很聪明。在第三次阅读时,将其与 OO 世界进行比较,这听起来又像是一个 hack。

所以我在这里。

0 投票
5 回答
1673 浏览

c# - 在 C# 中使用公共无参数构造函数什么时候很重要?

我试图了解 C# 中泛型类型参数的约束where T : new()约束的目的是什么?为什么你需要坚持类型参数有一个公共的无参数构造函数?

编辑: 我一定错过了什么。评分最高的答案说公共无参数构造函数是实例化泛型类型所必需的。如果是这样,为什么这段代码会编译和运行?

编辑:在他的评​​论中,gabe 提醒我,如果我没有定义构造函数,编译器会默认提供一个无参数的构造函数。因此,我的示例中的类 Foo 实际上确实有一个公共的无参数构造函数。