问题标签 [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.

0 投票
2 回答
924 浏览

c# - C# 派生泛型类型参数

我正在使用 ASP.NET MVC 4、Entity Framework 和 C# 制作一个 Web 应用程序,并且我正在编写抽象超类来封装实体模型和视图模型。虽然细节并不重要,但我的问题是我希望这些抽象类实现从任何给定视图模型映射到相应实体模型的函数,反之亦然。

我实际上已经使用泛型和反射实现了这样的方法,但是我想让它更整洁。我通过这样定义 EntityModel 类来完成所有工作:

似乎没有必要将实体模型的类型作为参数发送,因为调用对象会知道它自己的类型,并让调用代码指定它会导致愚蠢的错误,但我不知道如何摆脱它。将方法定义为

看起来更整洁但它给出了编译时错误,因为 EntityModel 是抽象的。有没有办法告诉编译器它必须是 EntityModel 的派生而不是 EntityModel 本身?还是有其他更好的解决方案?

ViewModel<> 类非常相似,定义为:

它正在按预期工作。

0 投票
1 回答
1858 浏览

c# - C# 泛型约束:结构数组

我想创建一个通用约束,其中包含要成为值类型(结构)数组的类型,例如:

或者可能

但这不起作用。似乎 System.Array 不能用作类型约束。

那么 - 如何将泛型参数约束为结构数组?

第一次回答后更新:

0 投票
3 回答
102 浏览

c# - 是否可以将泛型类型参数约束到另一个泛型类型参数接受的任何内容?

例如:

由于 SSoT 和 DRY 原则,我不想将 ClassA 的约束复制到 ClassB。

0 投票
2 回答
106 浏览

c# - 有什么方法可以将泛型接口限制为实现它的类型?

有没有办法限制T实现接口的类型?(Foo在这种情况下)。最好强制执行任何实现ICloneable以返回其自身的实例,而不是它喜欢的任何随机类型。

0 投票
1 回答
135 浏览

c# - C# 将泛型参数转换为接口

我需要帮助将通用参数转换为接口。

我有这样的预烘焙代码:

我想实现这样的东西

在这一点上,我找不到任何解决方案,所以任何东西都会有帮助,谢谢。

编辑:最初函数返回了一个 int ,但它有一个更简单的解决方案,与代码的预期目的不兼容,函数已更改为请求泛型类型。

0 投票
1 回答
411 浏览

f# - 为什么我们不能通过类型扩展来满足 F# 静态成员约束?

我希望能够使用静态方法从其他库扩展类型以启用通用算术。VectorN以Microsoft新推出的 SIMD 友好的固定大小类型为例。他们定义Zero,他们定义(+),他们定义(/),但我不能Array.average在他们身上使用,因为他们没有定义DivideByInt,我很乐意:

但它不会让我编译,抱怨

为什么 F# 编译器中存在此限制?

(编辑:基本上之前问同样的问题。)

0 投票
1 回答
99 浏览

.net - .NET 泛型类型约束不等式

我正在尝试实现两个通用接口。ITwoWayMapper<T,U>将同时实现IOneWayMapper<T,U>和是有道理的IOneWayMapper<U,T>。因此,如果我尝试这样做:

我得到错误Interface ITwoWayMapper<T,U> cannot implement both IOneWayMapper<T,U> and IOneWayMapper<U,T> because they may unify for some type parameter substitutions。所以我认为,好吧,这是有歧义的,因为它无法判断哪个接口得到满足。

所以这引出了我的问题:是否可以使用类型约束来说这样的话?:

0 投票
1 回答
417 浏览

scala - scala 类型签名以允许对成员进行数字操作

我有两个基本相同的案例类,除了一个有 Int 和另一个 Double 成员。我正在尝试创建一个通用特征,可用于在其中任何一个上运行并允许基本数字运算的函数。但到目前为止,我无法弄清楚如何使用 Numeric 或 Ops 类型:

我想提出一个函数约束,以便我可以对成员执行数字操作,类似于:

这不起作用,我想我需要以Numeric某种方式调用类型类,但我最接近的是:

是否有类型约束/签名Sentiment和/或effective我可以定义为直接使用+-操作成员?

0 投票
0 回答
49 浏览

c# - 有什么方法可以使用 2 种不一样的泛型类/方法吗?

我可以创建一个通用类并使用“where”语句,例如:

确保类型“T”实现了接口“IDisposable”。

是否有某种方法可以创建具有 2 种类型的泛型类,这些类型将类型限制为彼此不同,例如:

谢谢

0 投票
4 回答
2301 浏览

c# - C#在“where TEntity:class”上实现接口

我对.NET比较陌生,并且偶然发现了这个特定问题:在遵循有关存储库模式的教程时,该类的定义如下所示:

话虽如此,这个类应该实现一个接口。由于我已经使用了:运算符,我该怎么做?

我试着去public class GenericRepository<TEntity> : IGenericRepository where TEntity : class {public class GenericRepository<TEntity> where TEntity : class : IGenericRepository {但它也不起作用