2012-04-10 40 views
1

我有一個簡單的場景,其中AnotherTest值基於Test值。這在大多數情況下都能正常工作,所以只要我提供Test,我一定會很容易得到AnotherTest多個訪問器在c中具有相同的值#

public sealed class Transaction { 
    public string Test { get;set; } 
    public string AnotherTest{ 
     get { 
      int indexLiteryS = Test.IndexOf("S"); 
      return Test.Substring(indexLiteryS, 4); 
     } 
    } 
} 

但是我希望能夠還setAnotherTest值,並能無需提供Test價值讀它。這可能嗎?所以有兩種類型的get,它的設置方式。我知道我可以創建3rdTest,但我有一些方法使用AnotherTest和其他字段,我將不得不編寫該方法的重載。

編輯:

我讀了一些銀行提供的文件。我把它切成塊,把一些東西放在Test的值中,並且交易的其他所有字段(AnotherTest和類似)都會自動填充。 但是後來我想從SQL讀取已經處於良好格式的事務,因此我不需要提供Test以獲取其餘字段。我想用set設置這些字段,然後可以使用get而不設置Test值。

+3

你的'AnotherTest' getter目前是遞歸的,並且還提到'LiniaTransakcjiString' - 這兩個是否意味着實際使用'Test'? – 2012-04-10 16:45:42

+0

是既測試(複製/粘貼),但插入了錯誤的值 – MadBoy 2012-04-10 16:46:37

+0

那麼它在邏輯上意味着*設置AnotherTest沒有一個測試值?這並沒有幫助你沒有給我們真正的指示這些屬性是什麼意圖代表。 – 2012-04-10 16:48:11

回答

4

是的,就像這樣:

public string Test { get; set; } 

public string AnotherTest 
{ 
    get 
    { 
     if(_anotherTest != null || Test == null) 
     return _anotherTest; 

     int indexLiteryS = Test.IndexOf("S") 
     return Test.Substring(indexLiteryS, 4); 
    } 
    set { _anotherTest = value; } 
} 
private string _anotherTest; 

這爲

return (_anotherTest != null || Test == null) 
    ? _anotherTest 
    : Test.Substring(Test.IndexOf("S"), 4); 
1

我認爲這會做你想要做什麼的getter也可以表示爲:

public sealed class Transaction { 
    public string Test { get;set; } 
    public string AnotherTest{ 
     get { 
      if (_anotherTest != null) 
      { 
       return _anotherTest; 
      } 
      else 
      { 
       int indexLiteryS = Test.IndexOf("S"); 
       return Test.Substring(indexLiteryS, 4); 
      } 
     } 
     set { 
      _anotherTest = value; 
     } 
    } 
    private string _anotherTest = null; 
} 
0

我會建議把問題轉過來。

這聽起來像是你在處理一個大的領域和子領域。相反,如何將這些子領域推廣到領域,並在訪問大領域時構建/解構大領域。

+0

我正在從銀行的文件中解構爲我提供的大字段。當它以乾淨的格式保存到SQL中時,嘗試讀取SQL並構建與銀行發送信息相同的類型似乎不是一個好主意,因爲它看起來過於誇張,代碼也不必要。 – MadBoy 2012-04-10 16:57:11

相關問題