GenericArguments[0], 'EntityGenericBase`1[TModel]' 违反了类型参数 'TModel' 的约束
Posted
技术标签:
【中文标题】GenericArguments[0], \'EntityGenericBase`1[TModel]\' 违反了类型参数 \'TModel\' 的约束【英文标题】:GenericArguments[0], 'EntityGenericBase`1[TModel]' violates the constraint of type parameter 'TModel'GenericArguments[0], 'EntityGenericBase`1[TModel]' 违反了类型参数 'TModel' 的约束 【发布时间】:2018-12-30 18:55:25 【问题描述】:谁能帮我解决这个问题: 我使用 c# Winforms 作为伙伴创建了一个通用基础“用户控件”:
public class EntityGenericBase<TModel> : UserControl
where TModel : class, IEntityClass, new()
我已经创建了另一个继承上述“EntityGenericBase”的用户控件:
public class DepartmentView : EntityGenericBase<Department>
public DepartmentView():base()
InitializeComponent();
但不幸的是,当我尝试在设计模式下查看用户控件时,我收到以下错误:
GenericArguments[0], 'Department', on 'EntityGenericBase`1[TModel]' 违反了类型参数 'TModel' 的约束。
我仍然可以毫无问题地运行应用程序。
备注:当我删除约束“where子句”时,一切正常。
我使用“Visual Studio Community 2017”
【问题讨论】:
报错信息说Department
is not implemented IEntityClass
or It's not a class, or it doesn't have a parameterless constructor.
感谢您的宝贵回复。是的,它工作正常,但没有“位置”约束。
不客气。仔细阅读下面的评论/答案,并确保 Department
类满足所有条件。
但是当我添加'where TModel : class, IEntityClass, new() 时会产生上述错误。当我从约束中删除“IEntityClass”时,问题就解决了
其实好像是已知问题***.com/questions/41931853/…
【参考方案1】:
如错误信息所述
GenericArguments[0], 'Department', on 'EntityGenericBase`1[TModel]' 违反类型参数“TModel”的约束。
您的模型部门违反了一项或多项约束
class, IEntityClass, new()
部门不是其中的一个或多个
-
它不是一个类
它没有实现 IEntityClass 接口
它没有无参数构造函数
【讨论】:
非常感谢。尽管我已经检查了几次,但我会进一步检查。 我已经检查过,一切看起来都很好,请看一下'Department' Class 和'IEntityClass' //IEntityClass 接口 public interface IEntityClass string ModelName get;放; //EntityClass 类 public abstract class EntityClass : IEntityClass public string ModelName get;放; //部门类 public class Department : EntityClass private static Department _default;公共静态部门默认获取返回_default ?? (_default = 新部门()); 公共部门() @نديمالجود 好的,你为什么不干脆摆脱 IEntityClass 接口并在约束中使用抽象的 EntityClass 呢?当你有抽象类时,看起来你不需要接口 有一点值得一提。重新启动 Visual Studio 后,我可以在设计模式下显示“UserControl”,但一旦我构建项目,就会出现错误【参考方案2】:这是一个已知问题,唯一的解决方法似乎是重新启动 VS Designer error: GenericArguments[0], 'X' on 'Y' violates the constraint of type parameter 'Z'
【讨论】:
以上是关于GenericArguments[0], 'EntityGenericBase`1[TModel]' 违反了类型参数 'TModel' 的约束的主要内容,如果未能解决你的问题,请参考以下文章