Динамически добавлять значения в список <double>, используя get & set - PullRequest
0 голосов
/ 20 октября 2011

Можно ли сделать что-то вроде

public class TestClass
{
        public List<double> preTvoltage 
        {
            get 
            {
                return preTvoltage;
            } 
            set 
            { 
                preTvoltage.Add(this); //how to add to the List??
            } 
        }
}

Причина, по которой я хочу это сделать (я не знаю, является ли это лучшим методом, насколько позволяют мои знания), потому что я должен получать данные из файлов XML, в которых не всегда одинаковое количество данных .

Позже я хочу заполнить строки ListView и, используя список, подсчитать, сколько элементов и сколько столбцов потребуется.

Вот схема файла xml: enter image description here и в xml-файле есть также узлы Trigger и PostTrigger с такой же сортировкой данных. и вот список, который я хочу получить: enter image description here Ссылка на полноразмерное изображение

Итак, есть несколько групп выводов, и каждая пинггруппа имеет много данных, и приведенный выше код должен был содержать только один из узлов напряжения в XML-файле.

Я прислушиваюсь к вашим идеям!

Спасибо.

Ответы [ 6 ]

5 голосов
/ 20 октября 2011

Нет, и это противоречит использованию свойств - вы должны реализовать его как Add (или с точно таким же именем) метод.

Вы не можете добавить this, потому что this являетсяTestClass, а не double;и вы не можете добавить value, поскольку в противном случае предлагает , потому что это List<double>, а Add требует double.

4 голосов
/ 20 октября 2011

Непонятно, как бы вы это использовали, но мне кажется, очень плохая идея . Установка коллекции в качестве свойства уже немного необычна, но для этой операции набора еще более странно, если mutate список. дополнительно странно, что вы не используете переменную value в установщике ... почему бы и нет?

Вы должны подумать о том, как будет выглядеть вызывающий код, и действительно ли это - самый ясный способ выражения желаемой семантики.

3 голосов
/ 20 октября 2011
set { preTvoltage.AddRange(value); }

Как говорит Джон Скит, это не то, что вы должны делать.Вместо этого сделайте

TestClass t = new TestClass();
t.PreTvoltage.Add(...);

, объявив свойство как

public List<double> PreTvoltage
{
    get { return preTvoltage; }
}
0 голосов
/ 21 октября 2011

Ну, мне удалось решить мою проблему следующим образом:

public class ITestData
{
    public string pinName { get; set; } //Name of the pin
    public double stressLevel { get; set; } //Stress level for latchup
    public int psuCount { get; set;} //Number of PSU's 

    public List<double[]> preTrigger = new List<double[]>();
    public List<double[]> inTrigger = new List<double[]>();
    public List<double[]> postTrigger = new List<double[]>();


    public void AddPreTrigger(double volt, double curr)
    {
        double[] data = new double[2];
        data[0] = volt;
        data[1] = curr;
        preTrigger.Add(data);
    }

    public void AddInTrigger(double volt, double curr)
    {
        double[] data = new double[2];
        data[0] = volt;
        data[1] = curr;
        inTrigger.Add(data);
    }

    public void AddPostTrigger(double volt, double curr)
    {
        double[] data = new double[2];
        data[0] = volt;
        data[1] = curr;
        postTrigger.Add(data);
    }
}
0 голосов
/ 20 октября 2011

Вы не можете реализовать это так, предпочтительным способом является создание элементов управления коллекцией, таких как:

private IList<double> _preTvoltage = new List<double>();

public IEnumerable<double> preTvoltage 
{
    get 
    {
        return preTvoltage.AsEnumerable();
    } 
}

public void AddTvoltage(double item)
{
  _preTvoltage.Add(item);
}
0 голосов
/ 20 октября 2011

Тип геттера и сеттера должны совпадать.

Вы можете иметь:

public List<double> preTvoltage 
{
  get 
  {
    return preTvoltage;
  } 
  set 
  { 
    preTvoltage.AddRange(value); //add all items in list assigned.
  } 
}

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

...