【问题标题】:VS error in design time - Object of type 'ICustomType[]' cannot be converted to type 'ICustomType[]'设计时出现 VS 错误 - “ICustomType[]”类型的对象无法转换为“ICustomType[]”类型
【发布时间】:2012-10-07 10:51:55
【问题描述】:

我从PropertyGrid 创建了一个派生控件,并且以下属性导致 Visual Studio 在设计时出现问题。

注意:运行时没有任何问题。这只是设计师的问题,如果我从表单的资源文件中手动删除编码值,问题就会得到解决。

构造函数:

/// <summary>
/// Public constructor.
/// </summary>
public FilterablePropertyGrid()
{
    base.SelectedObjects = wrapper.ToArray();
}

房产代码:

private List<ObjectWrapper> wrapper = new List<ObjectWrapper>();

/// <summary>
/// Overwride the PropertyGrid.SelectedObject property.
/// The object passed to the base PropertyGrid is the wrapper.
/// </summary>
public new List<ICustomType> SelectedObjects
{
    get
    {
        return wrapper.Any() ?
            base.SelectedObjects.Select(p => ((ObjectWrapper)p).SelectedObject).ToList() :
            new List<ICustomType>();
    }
    set
    {
        if (value == null || value.Count == 0)
        {
            wrapper = new List<ObjectWrapper>();
            base.SelectedObjects = new object[] { };
        }
        else
        {
            wrapper = new List<ObjectWrapper>(value.Select(p => new ObjectWrapper(p)));
            // Link the wrapper to the parent PropertyGrid.
            base.SelectedObjects = wrapper.ToArray();
        }
    }
}

错误:

不知道你能不能帮我解决一下问题。

【问题讨论】:

  • 这个类的构造函数里有什么?有问题的代码是通过用户调用还是在实例化类时自动发生?如果是自动的,那可能是你的问题,如果你在设计时,你可以绕过构造函数。如果是这样的话,我可以给你代码。
  • ICustomType 是框架类型,还是您自己的自定义类型?
  • @MarcGravell:这是我自己的自定义类型
  • @BobHorn:我添加了构造函数代码..我认为问题不是由它引起的。
  • 如果你在构造函数中注释了那一行代码会发生什么?您还有设计时问题吗?

标签: c# .net winforms windows-forms-designer propertygrid


【解决方案1】:

由于这是您自己的自定义类型(不是框架类型),此错误几乎总是意味着您在两个不同的程序集中声明了相同的接口。

检查此类型的声明位置。它应该只在一个程序集中。根据需要添加引用,以便所有位置都可以访问单个程序集中的类型。

将相同的代码文件编译到两个程序集中会创建两种不同的类型,它们恰好被称为相同的东西。它们不是同一类型,不可互换。

【讨论】:

  • 在代码中,同一类型的另一个程序集中没有其他类型。但是我将界面设为内部而不是公开,似乎问题已得到解决。我仍然不知道发生了什么。
  • @Homam 真的很奇怪;不幸的是,这里很难重现:(
  • @Mark Gravell。没关系。非常感谢。
  • 这是一个设计师的问题,对我来说重要的是我现在可以使用它:)
【解决方案2】:

我遇到了类似的问题。我去了 resx 文件,找到了导致问题的类型的对象,然后将其删除。 然后我在运行时为该属性分配了一个值。 这样,设计师就没有什么可抱怨的了,您可以在不同的程序集中安全地使用派生控件。

【讨论】:

    【解决方案3】:

    我在 VS 2019 中遇到了类似的问题,最终删除了 .vs 文件夹。之后一切都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2023-04-03
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多