如何更改作为参数传递的对象属性?

时间:2019-04-10 11:31:43

标签: c# .net oop parameters

我想将对象传递给方法,但是在此期间,我想更改所述对象的属性。我现在的操作方式是这样的:

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 个答案:

答案 0 :(得分:3)

我看不出有任何理由在一行上执行此操作。这段代码看起来绝对不错:

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 :(得分:1)

您可以使用扩展方法来执行此操作,该方法更改属性并返回更改的对象

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))