首页 > 解决方案 > 如何更改作为参数传递的对象属性?

问题描述

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

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.

如果可能的话,这是一种好的做法吗?

标签: c#.netoopparameters

解决方案


我看不出有任何理由在一行中执行此操作。这段代码看起来非常好:

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

但我觉得这会降低代码的可读性。


推荐阅读