Исправление .NET кода генерации свойств для пользовательских элементов управления - PullRequest
2 голосов
/ 07 декабря 2009

У меня есть свойство типа IEnumerable<SomeClassIWrote> в пользовательском элементе управления. Когда я использую этот элемент управления в графическом интерфейсе, файл .Designer.cs содержит строку:

theObject.TheProperty = new SomeClassIWrote[0];

Что по какой-то причине вызывает предупреждение компилятора:

Object of type 'SomeClassIWrote[]' cannot be converted to type
'System.Collections.Generic.IEnumerable`1[SomeClassIWrote]'.

Что для меня загадка, потому что я передаю массивы как IEnumerables все время, а компилятор никогда не жаловался.

Для чего бы то ни было, у меня для свойства задано значение по умолчанию, равное null, но я получил ту же ошибку, прежде чем установить значение по умолчанию.

Как я могу это исправить, чтобы Visual Studio не жаловался и не просил меня игнорировать и продолжать каждый раз, когда я запускаю конструктор?


код объекта недвижимости:

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

1 Ответ

6 голосов
/ 07 декабря 2009

Сначала вы ХОТИТЕ установить его в конструкторе?

Если нет, добавьте следующие атрибуты:

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

Если вы действительно хотите установить в конструкторе, я бы сначала попробовал ваш класс как SomeClassIWrote[], чтобы посмотреть, работает ли он.

Кроме того, важно ли здесь использовать IEnumerable? Как вы говорите, вы можете передавать массивы как IEnumerables.

Я подозреваю, что внутри дизайнера, возможно, есть некоторые ограничения, о которых знают более умные люди, чем я ...

И если вам действительно нужно свойство IEnumerable, вы можете представить свой массив как IEnumerable, но сохранить свой массив как удобное для разработчика вспомогательное поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...