修复用户控件的.NET代码生成属性

Ins*_*ter 2 .net c# user-controls visual-studio winforms

IEnumerable<SomeClassIWrote>在用户控件中有一个类型的属性.当我在GUI中使用此控件时,.Designer.cs文件包含以下行:

theObject.TheProperty = new SomeClassIWrote[0];
Run Code Online (Sandbox Code Playgroud)

由于某种原因导致编译器警告:

Object of type 'SomeClassIWrote[]' cannot be converted to type
'System.Collections.Generic.IEnumerable`1[SomeClassIWrote]'.
Run Code Online (Sandbox Code Playgroud)

这对我来说是一个谜,因为我一直将数组作为IEnumerables传递,编译器从未抱怨过.

对于它的价值,我有一个为属性指定的默认值null,但在设置默认值之前我得到了相同的错误.

我如何解决这个问题,以便Visual Studio不会抱怨并让我忽略并在每次拉起设计师时继续?


物业代码:

[DefaultValue(null)]
public IEnumerable<SomeClassIWrote> TheProperty {
    get { 
        return _theProperty; 
    }
    set {
        if (value == null) {
            _theProperty = new SomeClassIWrote[] { };
        }
        else {
            _theProperty = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*jol 6

首先,您是否希望能够在设计师中设置它?

如果没有,请添加以下属性:

    [Browsable(false)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
Run Code Online (Sandbox Code Playgroud)

如果你想在设计师中设置,我首先尝试你的课程SomeClassIWrote[],看看是否有效.

除此之外,在这里使用IEnumerable是否重要?如你所说,你可以将数组作为IEnumerables传递.

我怀疑设计师内部可能存在一些限制,比我更了解...

如果你真的想要IEnumerable属性,你可以将你的数组暴露为IEnumerable,但是将你的数组保持为设计者友好的支持字段.