Как изменить свойство объекта, переданное в качестве параметра? - PullRequest
0 голосов
/ 10 апреля 2019

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

MyClass someClass= someClasses.FirstOrDefault(s => s.Propert1. == "1");
someClass.Property1 = 2;
MyMethod(someClass);

Однако я не хочу делать дополнительный шаг создания переменной и затем установки свойства.

MyMethod(someClasses.FirstOrDefault(s => s.Propert1. == "1")/*.ChangeProperty()?*/); //This is where I would like to change Property1's value.

Это хорошо?практиковаться, если вообще возможно?

Ответы [ 2 ]

3 голосов
/ 10 апреля 2019

Не вижу смысла делать это в одной строке. Этот код выглядит абсолютно нормально:

MyClass someClass= someClasses.FirstOrDefault(s => s.Propert1. == "1");
someClass.Property1 = 2;
MyMethod(someClass);

Если вы хотите, вы можете добавить метод расширения, который делает это:

// put this in a static class
static T WithNewPropertyValue<T>(this T t, Action<T> action) where T : class
{
    action(t);
    return t;
}

И назови это так

MyMethod(someClasses.FirstOrDefault(s => s.Propert1 == "1").WithNewPropertyValue(x => x.Propert1 = "2"));

Но я чувствую, что это снижает читабельность кода.

1 голос
/ 10 апреля 2019

Вы можете сделать это с помощью метода расширения, который изменяет свойство и возвращает измененный объект :

public static MyClass WithProperty2(this MyClass source, int value)
{
   if (source != null)  // make sure you handle null
     source.Property2 = value;

   return source;
}

Теперь у вас есть свободный API для выполнения однострочников (что не делает ваш код более понятным):

MyMethod(someClasses.FirstOrDefault(s => s.Propert1. == "1").WithProperty2(42))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...