【问题标题】:‏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”时,问题就解决了
  • 其实好像是已知问题stackoverflow.com/questions/41931853/…

标签: c# winforms


【解决方案1】:

如错误信息所述

GenericArguments[0], 'Department', on 'EntityGenericBase`1[TModel]' 违反类型参数“TModel”的约束。

您的模型部门违反了一项或多项约束

class, IEntityClass, new()

部门不是其中的一个或多个

  1. 它不是一个类
  2. 它没有实现 IEntityClass 接口
  3. 它没有无参数构造函数

【讨论】:

  • 非常感谢。尽管我已经检查了几次,但我会进一步检查。
  • 我已经检查过,一切看起来都很好,请看一下'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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多