Структура C # с внутренним методом Clear () - PullRequest
1 голос
/ 20 сентября 2011

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

   public struct GraphValues
   {
        public int min, max, ...;

        public GraphValues(int min, int max, ...)
        {
            this.min = min;
            this.max = max;
            ...
        }

        public static void Clear(this GraphValues values)
        {
            values.min.Equals(null);
            values.max.Equals(null);
            ...
        }
    }

Так что писать новые значения в этой структуре - это нормально,

GraphValues val = new GraphValues()
val.max = 12;
val.min = 1;

, но я хочу установить все значения структуры как нуль .Называть что-то вроде

val.Clear();

Есть идеи?Thnaks

Ответы [ 2 ]

7 голосов
/ 20 сентября 2011
  1. Структуры не должны быть изменяемыми.Вместо этого сделайте ваш тип классом.
  2. Чтобы разрешить нулевые значения, используйте пустые типы.
  3. Используйте свойства вместо открытых полей.

Фиксированный код:

public class GraphValues
{
     public int? Min { get; set; } 
     public int? Max { get; set; }
     // etc...

     public void Clear()
     {
         Min = null;
         Max = null;
         // etc...
     }
}

Я бы также посоветовал вам подумать, не лучше ли создать новый объект вместо того, чтобы устанавливать для полей существующего объекта значение NULL:

//val.Clear();           // Don't do this.
val = new GraphValues(); // Just create a new object.
2 голосов
/ 20 сентября 2011

Удалите ключевое слово static из определения метода Clear(), чтобы оно было доступно для каждого экземпляра вашего объекта GraphValues. Кроме того, нет необходимости передавать параметры - внутри метода Clear() у вас будет доступ ко всем вашим членам. И вы хотите установить их на NULL, а не сравнивать их значения с NULL.

    public void Clear()
    {
        this.min = null;
        this.max = null;
        ...
    }

И почему так или иначе это структура? Просто используйте класс.

...