如何在另一个通用基类上添加C#通用类型约束?

水下的

我已经阅读了有关C#泛型类型参数约束的MSDN文档,但是我无法弄清楚如何执行此操作,或者无法确定是否可行。

说我有一个像这样的通用基类:

public abstract class Entity<TId> { ... }

这个抽象基类没有任何类型约束,TId可以是任何东西-结构,类等。

现在说我有一个通用接口方法,并且我想将方法​​的通用类型限制为上述类:

public interface ICommandEntities
{
    void Update<TEntity>(TEntity entity) where TEntity : ?????;
}

我可以将其编译:

public interface ICommandEntities
{
    void Update<TEntity, TId>(TEntity entity) where TEntity: Entity<TId>
}

...但是执行该方法时,我需要显式地添加两个T1 ant T2通用args:

commander.Update<AbcEntity, string>(abcEntity);

如果可能的话,我想让编译器推断所有内容,以便可以执行如下方法:

commander.Update(abcEntity);

这可能吗?到目前为止,使它起作用的唯一方法是在泛型基类之上添加一个空的非泛型基类,并将其用作方法的类型约束:

public abstract Entity {}

public abstract EntityWithId<TId> : Entity { ... }

public interface ICommandEntities
{
    void Update<TEntity>(TEntity entity) where TEntity : Entity;
}

commander.Update(abcEntity);

...但是最后我得到了一个无用的类,它充当了标记接口。这是摆脱这种通用类和接口方法设计的唯一方法吗?还是我在这里想念什么?

J76

检查它可以编译后,我将其升级为答案。

根据您的问题和评论,您希望参数为Entity<Something>您无需将参数化类型直接用作类型,可以将其用于参数化。

所以做

 public void Update(Entity<T1> entity) where ....

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

F#通用约束,使一个通用类型可以从另一个继承

c#如何从另一个类中的通用扩展方法调用Action

在另一个通用类中用作类型参数时,无法推断通用类型

Java:将通用类型传递给另一个通用类型类

包含另一个通用类型的子代的通用类

Java创建一个通用类,该通用类实现具有约束的另一个通用接口

如何将通用接口的类型绑定到另一个通用接口?

如何增加一个通用类型在Rust中实现另一通用类型的约束?

如何在c中另一个函数之前和之后执行通用代码?

将通用类型列表添加到另一个

如何将通用类型的数据列表转换为另一个通用类型的数据列表

如何使一个类的泛型与另一个没有孩子父级关系的类成为通用类型?

为什么将通用返回类型强制转换为另一个通用类型?

根据TypeScript中的另一个通用参数推断通用类型参数

将通用对象数组转换为另一个通用类的数组

C#将对通用方法的引用传递给另一个方法

如何将C#泛型类型传递给另一个类

具有多个可选约束但只有一个通用参数的通用方法 (c#)

如何在另一个类 C# Windows Forms 中引用一个类

是否可以使接口方法返回带有C#中通用类型参数的另一个方法的类型?

如何在Kotlin中声明一个包含通用类型字段的类?

将值从一个数组映射到另一个 C# 的通用扩展方法

如何在C#中获取另一个对象的属性的对象类型?

如何使通用TypeScript接口从另一个通用接口扩展?

C#如何在while循环中从另一个类调用void方法

C#:如何在另一个类中使用可索引属性?

如何在 C# 中使用另一个类更改变量

基类和接口的 C# 通用约束

C#通过一个方法添加控件,从另一个类开始