Re: PropertyInfo и string[]
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 22.10.08 08:25
Оценка: 2 (1) +1
Здравствуйте, my_soul, Вы писали:

_>Добрый день!


_>если есть свойство public string[] Strings {get;set;}


_>Как через PropertyInfo добавить строку к Strings (не заменить, а добавить)?


Никак. Массивы фиксировнного размера. Создайте новый большей длины, скопируйте содержимое исходного массива и замените строку по нужному индексу.
Re: PropertyInfo и string[]
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 22.10.08 08:19
Оценка: 2 (1)
Здравствуйте, my_soul, Вы писали:

_>Добрый день!


_>если есть свойство public string[] Strings {get;set;}


_>Как через PropertyInfo добавить строку к Strings (не заменить, а добавить)?


Выдернуть текущее содержимое, отресайзить массив и дописать новый элемент, после чего всё это запихать обратно...
[КУ] оккупировала армия.
Re[3]: PropertyInfo и string[]
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 22.10.08 08:35
Оценка: 2 (1)
Здравствуйте, 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;
Re[6]: PropertyInfo и string[]
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.10.08 09:06
Оценка: 2 (1)
Здравствуйте, my_soul, Вы писали:

_>>Вот снова вопрос. А если я не знаю какого типа у меня элементы в свойстве., но я знаю их тип. как мне создать массив объектов этого типа?


_>Ой.. че сказал.. у меня есть Type elemType как создать массив объектов типа elemType?


воспользоваться методом Array.CreateInstance(Type, Int32)

P.S. Что-то мне кажется, что за обсуждаемой проблемой стоит кривое решение... Можно узнать суть задачи на более высоком уровне?
PropertyInfo и string[]
От: my_soul  
Дата: 22.10.08 08:17
Оценка:
Добрый день!

если есть свойство public string[] Strings {get;set;}

Как через PropertyInfo добавить строку к Strings (не заменить, а добавить)?
Re[2]: PropertyInfo и string[]
От: my_soul  
Дата: 22.10.08 08:26
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Выдернуть текущее содержимое, отресайзить массив и дописать новый элемент, после чего всё это запихать обратно...


Правильно я понимаю что это будет как-то так:

Type propType = propInfo.PropertyType;
  if(propType.IsArray)
  {
    if(propType.GetArrayRank() != 1)
      continue;

    MethodInfo getMethod = propInfo.GetGetMethod();
    if (getMethod == null)
      continue;

    object[] arr = getMethod.Invoke(obj); // obj - обект класса, содержий propInfo
    arr.Add("новая строка");

    //GetSetMethod и запихнуть обратно..
Re[4]: PropertyInfo и string[]
От: my_soul  
Дата: 22.10.08 08:54
Оценка:
P>Без рефшекшина это будет выглядеть так (спроецировать на рефликшин просто)
P>
P>public string[] Strings {get;set;}

P>string[] resizedArray = new string[obj.Strings.Length + 1];
P>obj.Strings.CopyTo(resizedArray, 0);
P>resizedArray[resizedArray.Length - 1] = "some new string";

P>obj.Strings = resizedArray;
P>


Вот снова вопрос. А если я не знаю какого типа у меня элементы в свойстве., но я знаю их тип. как мне создать массив объектов этого типа?
Re[5]: PropertyInfo и string[]
От: my_soul  
Дата: 22.10.08 08:56
Оценка:
_>Вот снова вопрос. А если я не знаю какого типа у меня элементы в свойстве., но я знаю их тип. как мне создать массив объектов этого типа?

Ой.. че сказал.. у меня есть Type elemType как создать массив объектов типа elemType?
Re[7]: PropertyInfo и string[]
От: my_soul  
Дата: 22.10.08 09:13
Оценка:
S>воспользоваться методом Array.CreateInstance(Type, Int32)

S>P.S. Что-то мне кажется, что за обсуждаемой проблемой стоит кривое решение... Можно узнать суть задачи на более высоком уровне?


Спасибо! Я успел найти ответ поиском
Суть такая:

Требуется по заданию конфигурационный файл, редактируемый человеком. В нем могут быть повторяюищиеся параметры, например:

Path=machine1
Username=guest
Field=field1
Field=field2
Field=field3

Есть класс потребляющий эти настройки, повторяющиеся поля представленны в виде массива.
Ну я и делаю класс, который читает название полей ищет соответ. свойства и записывает туда значение. А для повторяющихся полей — добавляет в конец.
Re[8]: PropertyInfo и string[]
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.10.08 09:52
Оценка:
Здравствуйте, my_soul, Вы писали:

_>Требуется по заданию конфигурационный файл, редактируемый человеком. В нем могут быть повторяюищиеся параметры, например:


_>Есть класс потребляющий эти настройки, повторяющиеся поля представленны в виде массива.

Properties vs. Methods
Re[9]: PropertyInfo и string[]
От: my_soul  
Дата: 22.10.08 10:00
Оценка:
_>>Требуется по заданию конфигурационный файл, редактируемый человеком. В нем могут быть повторяюищиеся параметры, например:

_>>Есть класс потребляющий эти настройки, повторяющиеся поля представленны в виде массива.

S>Properties vs. Methods

Статья хорошая, добавил в избранное. Спасибо (хотя все это пишу во всех книгах по ц-шарп). Только я не понял на что это намек. У меня в ствойствах ничего не вызывается, просто складируются настройки. Методы работают, употребляя эти настройки.
Re[10]: PropertyInfo и string[]
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.10.08 12:30
Оценка:
Здравствуйте, my_soul, Вы писали:

_>>>Требуется по заданию конфигурационный файл, редактируемый человеком. В нем могут быть повторяюищиеся параметры, например:


_>>>Есть класс потребляющий эти настройки, повторяющиеся поля представленны в виде массива.

S>>Properties vs. Methods

_>Статья хорошая, добавил в избранное. Спасибо (хотя все это пишу во всех книгах по ц-шарп). Только я не понял на что это намек. У меня в ствойствах ничего не вызывается, просто складируются настройки. Методы работают, употребляя эти настройки.

Было бы немного проще и ближе к рекомендациям объявить свойство только для чтения, но которое бы предоставляло доступ к списку строк (других сущностей).
IList<string> Strings { get { return _stringList; } }


И не будет необходимости возиться с массивами, не придется проверять а не засунул ли кто-то null вместо массива строк, в любой момент можно подменить реализацию списка для контроля над изменениями в нем.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.