2012-04-10 2 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 значения. Это возможно? Так любопытно 2 типа get, на основе которых он был установлен. Я знаю, что могу создать 3rdTest, но у меня есть некоторые методы, которые используют AnotherTest и другие поля, и мне пришлось бы писать перегрузки этих методов.

Edit:

Я прочитал какой-то файл, поставляемый банком. Я разрезал его на куски, добавив некоторые вещи в значение Test, и каждое другое поле (AnotherTest и подобное) Транзакции заполняется автоматически. Однако позже я хотел бы прочитать Transaction from SQL, который уже в хорошем формате, поэтому мне не нужно предоставлять Test, чтобы получить остальные поля. Я хотел бы установить эти поля с set, а затем использовать get без значения Test.

+3

Ваш гейтер 'AnotherTest' в настоящее время рекурсивен, а также упоминает' LiniaTransakcjiString' - эти два предназначены для фактического использования 'Test'? –

+0

Да, оба теста (копировать/вставлять), но вставили неправильное значение – MadBoy

+0

Итак, что бы это логично * означало *, чтобы установить AnotherTest, не имея тестового значения? Это не поможет, что вы не дали нам никакого реального указания на то, что эти свойства предназначены для представления. –

ответ

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

Я думаю, что это будет делать то, что вы хотите, чтобы это сделать:

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

I предложит проблему.

Похоже, вы имеете дело с большим полем и подполями внутри него. Вместо этого, как насчет продвижения этих подполей к полям и построения/деконструирования большого поля при его доступе.

+0

Я деконструирую большие поля, предоставленные мне в файле из банка. Когда он хранится в SQL в чистом формате, не представляется хорошей идеей попробовать прочитать SQL и построить тот же тип, который банк отправляет информацию, поскольку это кажется излишним и ненужным для кода. – MadBoy

Смежные вопросы