1

AnotherTest値に基づいた値を持つ単純なシナリオがありTestます。これはほとんどの場合うまく機能するので、提供するたびに簡単Testに取得AnotherTestできます。

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

set AnotherTestしかし、私は価値を提供しなくても、価値を見出して読むことができるようになりたいと思っていましたTest。これは可能ですか?getということで、どちらをベースに設定したかというと、なんとなく2種類。作成できることはわかっていますが、使用するメソッドと他のフィールド3rdTestがいくつかあり、そのメソッドのオーバーロードを作成する必要があります。AnotherTest

編集:

銀行から提供されたファイルを読みました。私はそれをバラバラに切り、いくつかのものをTest値に入れて、トランザクションの他のすべてのフィールド (AnotherTest など) が自動的に入力されるようにします。ただし、後で、既に適切な形式になっている SQL からトランザクションを読み取りたいのでTest、残りのフィールドを取得するために提供する必要はありません。これらのフィールドを設定してから、値を設定せずsetに使用できるようにしたいと思います。getTest

4

3 に答える 3

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);
于 2012-04-10T16:50:39.027 に答える
1

これはあなたがやりたいことをするだろうと思います:

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;
}
于 2012-04-10T16:52:28.247 に答える
0

問題をひっくり返すことをお勧めします。

大きなフィールドとその中のサブフィールドを扱っているようです。代わりに、これらのサブフィールドをフィールドに昇格させ、アクセス時に大きなフィールドを構築/分解するのはどうですか。

于 2012-04-10T16:55:02.767 に答える