2013-11-29 4 views
0

Я реализация комплексных чисел структуры, и я хочу, чтобы пользователи имели возможность вставить значения в Re и Im полея через свойство Geo, который является геометрической интерпретацией комплекса число, например (5, -3).Получение конкретных цифр из строки

struct Cplx 
{ 
    public double Re; 
    public double Im; 

    public string Geo 
    { 
     get 
     { 
      return "(" + Re + "," + Im + ")"; 
     } 
    } 
} 

Я не знаю, как сделать установить аксессор. В принципе, я хочу получить числа x, y из строки (x, y), чтобы я мог поместить их в двойные поля.

+0

Действительно ли это должен быть сеттер? Разве это не метод? –

+1

... или лучше два сеттера, по одному для каждого компонента. Таким образом, вы убедитесь, что пользователь _understands_, что они входят. Строка может быть плохо сформирована. –

+0

Это может быть, но разве это не для каких свойств? (Я не пытаюсь быть злым - я буквально спрашиваю) –

ответ

2

Просто проанализируйте value, который содержит входные данные как (5, -3), удаляет скобки и пробелы и преобразует значения в двойные.

set 
{ 
    var input = value.Split(new[] { '(', ')', ',' }, StringSplitOptions.RemoveEmptyEntries); 
    Re = Convert.ToDouble(input[0]); 
    Im = Convert.ToDouble(input[1]); 
} 

Только примечание, структуры должны быть неизменны, так что я бы посоветовал передать значения в конструктор вместо установки их с помощью свойства. Это было бы правильным способом сделать это

struct Cplx 
{ 
    public readonly double Re; 
    public readonly double Im; 

    public string Geo 
    { 
     get 
     { 
      return "(" + Re + "," + Im + ")"; 
     } 
    } 

    public Cplx(double re, double im) 
    { 
     Re = re; 
     Im = im; 
    } 

    public Cplx(string cplx) 
    { 
     var input = cplx.Split(new[] { '(', ')', ',' }, StringSplitOptions.RemoveEmptyEntries); 
     Re = Convert.ToDouble(input[0]); 
     Im = Convert.ToDouble(input[1]); 
    } 
} 
Смежные вопросы