C# VS设计时错误-类型为';ICustomType[]和#x27;无法转换为类型';ICustomType[]和#x27;

C# VS设计时错误-类型为';ICustomType[]和#x27;无法转换为类型';ICustomType[]和#x27;,c#,.net,winforms,windows-forms-designer,propertygrid,C#,.net,Winforms,Windows Forms Designer,Propertygrid,我从PropertyGrid创建了一个派生控件,以下属性在设计时会给Visual Studio带来麻烦 注意:在运行时没有任何问题。这只是关于设计器的问题,如果我手动从表单的资源文件中删除编码值,问题就会得到解决 建造商: /// <summary> /// Public constructor. /// </summary> public FilterablePropertyGrid() { base.SelectedObjects = wrapper.ToAr

我从
PropertyGrid
创建了一个派生控件,以下属性在设计时会给Visual Studio带来麻烦

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

建造商:

/// <summary>
/// Public constructor.
/// </summary>
public FilterablePropertyGrid()
{
    base.SelectedObjects = wrapper.ToArray();
}
//
///公共构造函数。
/// 
公共可过滤属性网格()
{
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();
        }
    }
}
private List wrapper=new List();
/// 
///覆盖PropertyGrid.SelectedObject属性。
///传递给基本PropertyGrid的对象是包装器。
/// 
公共新列表所选对象
{
得到
{
返回wrapper.Any()?
base.SelectedObjects.Select(p=>((ObjectWrapper)p).SelectedObject.ToList():
新列表();
}
设置
{
if(value==null | | value.Count==0)
{
包装器=新列表();
base.SelectedObjects=新对象[]{};
}
其他的
{
包装器=新列表(value.Select(p=>newobjectwrapper(p));
//将包装器链接到父属性Grid。
base.SelectedObjects=wrapper.ToArray();
}
}
}
错误:


我想知道您是否可以帮我解决问题。

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

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


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

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

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

这个类的构造函数中有什么?问题代码是通过用户调用的还是在实例化类时自动发生的?如果是自动的,这可能是您的问题,如果您在设计时,您可以绕过构造函数。如果是这样的话,我可以给你代码。ICustomType是框架类型,还是你自己的自定义类型?@MarcGravel:这是我自己的自定义类型type@BobHorn:我添加了构造函数代码。。我不认为问题是由它引起的。如果你在构造函数中注释那一行代码会怎么样?您是否仍然存在设计时问题?在代码中,同一类型的另一个程序集中没有其他类型。但是我将接口设置为内部接口,而不是公共接口,似乎问题已经解决。我仍然不知道发生了什么事。@Horam,这真是奇怪;不幸的是,这里很难重新编程:(@Mark gravel。没关系。非常感谢。这是设计师的问题,对我来说重要的是我现在可以使用它了:)