Здравствуйте, my_soul, Вы писали:
_>Добрый день!
_>если есть свойство public string[] Strings {get;set;}
_>Как через PropertyInfo добавить строку к Strings (не заменить, а добавить)?
Выдернуть текущее содержимое, отресайзить массив и дописать новый элемент, после чего всё это запихать обратно...
Здравствуйте, my_soul, Вы писали:
_>Добрый день!
_>если есть свойство public string[] Strings {get;set;}
_>Как через PropertyInfo добавить строку к Strings (не заменить, а добавить)?
Никак. Массивы фиксировнного размера. Создайте новый большей длины, скопируйте содержимое исходного массива и замените строку по нужному индексу.
Здравствуйте, my_soul, Вы писали:
_>Здравствуйте, koandrew, Вы писали:
K>>Выдернуть текущее содержимое, отресайзить массив и дописать новый элемент, после чего всё это запихать обратно...
_>Правильно я понимаю что это будет как-то так:
Нет.
Без рефшекшина это будет выглядеть так (спроецировать на рефликшин просто)
public string[] Strings {get;set;}
string[] resizedArray = new string[obj.Strings.Length + 1];
obj.Strings.CopyTo(resizedArray, 0);
resizedArray[resizedArray.Length - 1] = "some new string";
obj.Strings = resizedArray;
Здравствуйте, my_soul, Вы писали:
_>>Вот снова вопрос. А если я не знаю какого типа у меня элементы в свойстве., но я знаю их тип. как мне создать массив объектов этого типа?
_>Ой.. че сказал.. у меня есть Type elemType как создать массив объектов типа elemType?
воспользоваться методом Array.CreateInstance(Type, Int32)
P.S. Что-то мне кажется, что за обсуждаемой проблемой стоит кривое решение... Можно узнать суть задачи на более высоком уровне?
S>воспользоваться методом Array.CreateInstance(Type, Int32)
S>P.S. Что-то мне кажется, что за обсуждаемой проблемой стоит кривое решение... Можно узнать суть задачи на более высоком уровне?
Спасибо! Я успел найти ответ поиском
Суть такая:
Требуется по заданию конфигурационный файл, редактируемый человеком. В нем могут быть повторяюищиеся параметры, например:
Есть класс потребляющий эти настройки, повторяющиеся поля представленны в виде массива.
Ну я и делаю класс, который читает название полей ищет соответ. свойства и записывает туда значение. А для повторяющихся полей — добавляет в конец.
Здравствуйте, my_soul, Вы писали:
_>Требуется по заданию конфигурационный файл, редактируемый человеком. В нем могут быть повторяюищиеся параметры, например:
_>Есть класс потребляющий эти настройки, повторяющиеся поля представленны в виде массива. Properties vs. Methods
_>>Требуется по заданию конфигурационный файл, редактируемый человеком. В нем могут быть повторяюищиеся параметры, например:
_>>Есть класс потребляющий эти настройки, повторяющиеся поля представленны в виде массива. S>Properties vs. Methods
Статья хорошая, добавил в избранное. Спасибо (хотя все это пишу во всех книгах по ц-шарп). Только я не понял на что это намек. У меня в ствойствах ничего не вызывается, просто складируются настройки. Методы работают, употребляя эти настройки.
Здравствуйте, my_soul, Вы писали:
_>>>Требуется по заданию конфигурационный файл, редактируемый человеком. В нем могут быть повторяюищиеся параметры, например:
_>>>Есть класс потребляющий эти настройки, повторяющиеся поля представленны в виде массива. S>>Properties vs. Methods
_>Статья хорошая, добавил в избранное. Спасибо (хотя все это пишу во всех книгах по ц-шарп). Только я не понял на что это намек. У меня в ствойствах ничего не вызывается, просто складируются настройки. Методы работают, употребляя эти настройки.
Было бы немного проще и ближе к рекомендациям объявить свойство только для чтения, но которое бы предоставляло доступ к списку строк (других сущностей).
IList<string> Strings { get { return _stringList; } }
И не будет необходимости возиться с массивами, не придется проверять а не засунул ли кто-то null вместо массива строк, в любой момент можно подменить реализацию списка для контроля над изменениями в нем.