簡體   English   中英

如何更改作為參數傳遞的對象屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM