[英]How to change an object property passed as a parameter?
我想将对象传递给方法,但是在此期间,我想更改所述对象的属性。 我现在的方式是这样的:
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.
如果可能的话,这是一种好的做法吗?
我看不出有任何理由在一行上执行此操作。 这段代码看起来绝对不错:
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"));
但是我觉得这样会降低代码的可读性。
您可以使用扩展方法来执行此操作,该方法可以更改属性并返回更改的对象 :
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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.