Динамическая ссылка, изменение свойства для каждого элемента в списке - PullRequest
1 голос
/ 31 октября 2011

Динамически, я хотел бы взять строковое свойство, такое как «GPARank» и изменить его значение.

обычно, я бы имел

var rank = gpa.ForEach(x => x.GPARank = i);

Но в этом случае яне знаю, какое свойство я изменяю во время компиляции.Я пытался изменить код Марка Гравелла на Dynamic LINQ OrderBy на IEnumerable для моего использования, но мой мозг взорвался.

Спасибо!

Понялиспользуя отражение, все еще хочу решение динамических выражений linq

gpa.ForEach(x => x.GetType().GetProperty(_ColumnRank).SetValue(x, i += 1 , null));

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

1 Ответ

1 голос
/ 31 октября 2011

Псевдокод, непроверенный:

string propName = "GPARank";  
PropertyInfo prop = typeof(Item).GetProperty(propName);
Action<Item,string> setter = (Action<Item,string>)Delegate.CreateDelegate(
    typeof(Action<Item,string>), prop.GetSetMethod());
foreach(Item obj in list) setter(obj,newValue);

Если честно, в большинстве случаев будет работать только непосредственное использование PropertyInfo (через SetValue);единственное изменение, которое я внесу в ваш исходный код в этом случае, - это перемещение PropertyInfo вне цикла , а не для каждого элемента.

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