问题标签 [generic-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.
c# - 无法传递符合泛型约束的类型变量
说我有以上。现在下面的功能失败:
上面的代码有什么问题?ILovable<T>
有一个Care
函数,它吸收 a T
which is IEquatable<T>
。在上面的函数中,我调用了相同的Care
函数并传递T
了int
类型。int
毕竟是IEquatable<int>
。
我究竟做错了什么?有什么办法可以解决吗?
c# - 简单的通用误解
你能帮我理解这种情况下的错误吗?
即使我建立SomeClass<T>
as
我明确传递基本接口以包含所有(?)案例,但它仍然抛出错误
c# - 如何在泛型类 c# 中使用 where 运算符?
嗨,我想上课:
我希望 T 可以被 + 和 * 运算符相加和相乘
c# - 为什么 System.Array 不能是类型约束?
我正在开发一个带有几种不同类型数组的小项目(例如double[]
,,float[]
。int[]
为了验证/测试/健全的目的,我正在将其中一些数组打印到控制台。所以我有多个功能如下所示(为本示例进行了简化 - 假设我只处理一维数组):
我以我无限的智慧认为我可以通过简单地创建这些函数的通用版本来减少一些代码重复。所以我尝试了这个:
Intellisense 没有抱怨,但编译器失败并出现一个非常有趣的错误:
Constraint cannot be special class 'System.Array'
我一直在寻找解释(类似于或密封类,但除了在 msdn 上Object
提及之外,还没有找到太多。谁能向我解释为什么会这样?为什么我不能指定类型约束?System.Array
ps:在打字的时候,我意识到我可以更容易地完成我最初想要的事情,用一个简单的函数如下:
这就是为什么编译器中有一个特殊的数组规则吗?
c# - 实例化一个类型约束的泛型类而不继承它
背景
[如果您对背景不感兴趣,请跳至问题]
前几天阅读时,我偶然发现了这个通用类定义,它让我难过一段时间:
我很困惑T
on怎么Entity<T>
可能是 TypeEntity<T>
本身。这似乎是某种奇怪的递归约束。
然后我意识到这个约束可以通过子类来满足(当然,这abstract
是对类的要求):
在这里, typeT
被保证是 type Entity<T>
,因为Deriver
派生自Entity<Deriver>
.
问题
无论如何,这让我想知道,如果这个类不是抽象的,我们可以直接实例化它吗?
所以给定
我们可以Entity<T>
直接实例化吗?
显然我们不能说:
因为SomeClass
不满足约束where T : Entity<T>
。
忽略明显的“你为什么要这样做?” abstract
这本质上是一种确保在不使用关键字的情况下使用类之前获得类的方法吗?
c# - 已使用不同类型约束定义的具有相同签名的成员
我遇到了一个重载方法的问题,这些方法具有不同的约束,似乎是排他的。那是我的例子:
并且这不会与以下错误“已定义相同签名的成员”一起编译。是否可以同时满足这两个条件,或者这只是 C# 编译器的限制?
c# - 为值和引用类型定义通用接口类型约束
我在让这个通用约束起作用时遇到了一些麻烦。
我下面有两个接口。
我希望能够将 ICommandHandlers TResult 类型约束为仅使用实现 ICommandResult 的类型,但 ICommandResult 有自己的约束需要提供。ICommandResult 可能会从其 Result 属性返回值或引用类型。我错过了一些明显的东西吗?谢谢。
c# - 时间:2019-01-01 标签:c#templates如何将约束应用于从某事物派生的类
再次愚蠢的问题。
我有这个类通过一个基类引入一些代码,如下所示:
我现在想添加一些模板功能
但是当我需要提供一些约束时,我无法弄清楚我需要什么样的手指修改才能编译它。
这可以做到吗?
非常感谢。
bg
java - 使用泛型约束的 Java 工厂模式
我有
然后我这样称呼它
这里具体类实现IParsable
。我是否能够删除运行时断言检查并进行编译时检查以查看是否“IParsable”并调用解析?
另外我想知道是否有办法在getItem()
方法的编译时强制执行 IFoo<-->Foo 实现关系并删除类型转换(T)
?
IFoo
编辑:我想我会给出一个大纲Foo
编辑2:
我只是想到了这样的重构,现在唯一不是编译时检查的是接口和实现之间的关系。
c# - 针对通用接口或作为通用约束创建扩展方法?
我不确定这两个签名是否有任何真正的区别:
我认为这些基本上会以几乎相同的方式运行,但我不太确定......我在这里忽略了什么?