开发者

Fixing .NET code generation of properties for user controls

I have a property of type IEnumerable<SomeClassIWrote> in a user control. When I use this control in a GUI, the .Designer.cs file contains the line:

theObject.TheProperty = new SomeClassIWrote[0];

Which for some reason causes a compiler warning:

Object of typ开发者_StackOverflow社区e 'SomeClassIWrote[]' cannot be converted to type
'System.Collections.Generic.IEnumerable`1[SomeClassIWrote]'.

Which is a mystery to me because I pass arrays as IEnumerables all the time, and the compiler has never complained.

For what it's worth, I have a default value of null specified for the property, but I got the same error before I set a default value.

How can I fix this so Visual Studio doesn't complain and ask me to ignore and continue every time I pull up the designer?


Code for the property:

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


First up, do you WANT to be able to set it in the designer?

If not, add the following attributes:

    [Browsable(false)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

If you DO want to set in the designer, I'd start out by trying your class as a SomeClassIWrote[], to see if that works.

That aside, is it that important to use an IEnumerable here? As you say, you can pass arrays as IEnumerables.

I suspect there's probably some restrictions inside the designer, which wiser people than me know about...

And if you really DO want an IEnumerable property, you can expose your array as an IEnumerable, but keep your array as a designer-friendly backing field.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜