相关疑难解决方法(0)

C#:强制转换为基类型的通用接口

这是代码:

public interface IValidator<T>
{
   bool IsValid(T obj);
}

public class OrderValidator: IValidator<Order>
{
  // ...
}

public class BaseEntity
{
}

public class Order: BaseEntity
{
}
Run Code Online (Sandbox Code Playgroud)

问题是我做不到:

var validator = new OrderValidator();
// this line throws because type can't be converted
var baseValidator = (IValidator<BaseEntity>)validator;
// all this is because I need a list with IValidator<Order>, IValidator<BaseOrder>, etc.
IList<IValidator<BaseEntity>> allValidators = ... 
Run Code Online (Sandbox Code Playgroud)

如何获取并存储基础T的所有IValidator <T>实现的列表 - 比如BaseEntity?目前我做的是非通用的IValidator,接受"对象obj",但它不好,不是类型安全的.

有趣的是C#允许编译:

var test = (IValidator<BaseEntity>)new OrderValidator();
Run Code Online (Sandbox Code Playgroud)

但在运行时失败了

   Unable to cast …
Run Code Online (Sandbox Code Playgroud)

c# generics

11
推荐指数
1
解决办法
5974
查看次数

标签 统计

c# ×1

generics ×1