设计时出现的VS错误 - 类型为“ICustomType []”的对象无法转换为类型“ICustomType []”

3
我从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();
        }
    }
}

错误信息: enter image description here 我想知道问题出在哪里,请帮忙解决。

这个类的构造函数里有什么?有问题的代码是通过用户调用还是在类实例化时自动发生的?如果是自动发生的,那可能就是你的问题了,如果你在设计时可以绕过构造函数。如果是这种情况,我可以给你提供代码。 - Bob Horn
ICustomType是框架类型还是您自己的自定义类型? - Marc Gravell
@MarcGravell:这是我自己的定制类型。 - Homam
@BobHorn:我添加了构造函数代码...我不认为问题是由此引起的。 - Homam
如果您在构造函数中注释掉那一行代码,会发生什么?您是否仍然会遇到设计时问题? - Bob Horn
3个回答

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

1

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

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

将相同的代码文件编译为两个程序集会创建两种不同的类型,它们恰好被称为相同的名称。它们不是相同的类型,也不能互换使用。


在代码中,同一类型的另一个程序集中没有其他类型。但是我将接口从公共状态更改为内部状态,问题似乎已经解决。我仍然不知道发生了什么。 - Homam
@Homam 这真的很奇怪;不幸的是,我很难在这里重现 :( - Marc Gravell
@Mark Gravell。没事的。非常感谢你。 - Homam
这是一个设计者的问题,对我来说重要的是现在我可以使用它 :) - Homam

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接