2014-08-19 3 views
1

У меня есть класс, который я хочу сохранить экземпляры в моем файле настроек. Я не могу сохранить класс, используя обычную команду properties.settings.default.save(). Ошибка не возникнет, но настройки не будут сохраняться между прогонами, и я понимаю, что это проблема с сериализацией.Как сохранить многомерный массив в пользовательском классе с настройками

Я задал проблему одной конкретной публичной многомерной массиве int. Если я изменяю массив 2d на 1d-массив, он отлично работает, но для моего приложения предпочтительнее использовать 2d-массив. Поскольку я все еще учусь, я хотел бы знать конкретно, почему это происходит.

Вопрос в том, почему не удается сохранить 2-мерный массив в настройках? это проблема сериализации? Как я могу реализовать это правильно?

public class AsmbLine 
{ 

    public int linenumber { get; set; } 
    public Ticket[] ticketlist { get; set; } 
    public string[] platesizes { get; set; } 
    public string[] platetypes { get; set; } 
    public string[] platecounts { get; set; } 
    public int[,] cellidsallowed { get; set; } // This Line is the problem 

    //public int[] cellidsallowed { get; set; } //uncomment these two lines to fix 
    //public int[] cellidsallowedtypes { get; set; } // uncomment these two lines to fix 

Приветствия

** Редактировать **

Вот как я доступ/сохранить настройки. я найти при использовании пользовательских классов, его проще всего использовать отдельный BOOL для флага, если параметры инициализации впервые запуск

private void asmbinitializedcheckandload() 
    { 
      bool temp = false; 
      temp = Properties.Settings.Default.Asmbarrayinitialized; 
      if (temp == false) // if this is false, then we are running for the first time 
      { 
       Optimo20.Properties.Settings.Default.alines = new AsmbLine[maxlines]; //create new instance of alines[] 

       Properties.Settings.Default.Save(); // save 

       for (int i = 0; i < Properties.Settings.Default.alines.Length; i++) 
       { 
        Optimo20.Properties.Settings.Default.alines[i] = new AsmbLine(); // initialize each member of alines 


       }  
       Properties.Settings.Default.Asmbarrayinitialized = true; // set the flag to true, setting is initialized 
       Properties.Settings.Default.Save(); // save 
      } 

     alinearray = Optimo20.Properties.Settings.Default.alines; // load settings data into local array. 


    } 
+1

Поскольку вы изучаете этот сайт был бы идеальным для вас о том, как установить, что вам нужно [dontetperls 2D массив] (http://www.dotnetperls.com/2d-array) – MethodMan

+0

Спасибо. Dotnetperls уже стал для меня огромным источником помощи! – metinoheat

ответ

0

Что происходит, когда вы измените свой код на это ..? это должно Компиляция

public class AsmbLine 
{ 
    public int linenumber { get; set; } 
    public Ticket[] ticketlist { get; set; } 
    public string[] platesizes { get; set; } 
    public string[] platetypes { get; set; } 
    public string[] platecounts { get; set; } 
    //public int[] cellidsallowed { get; set; } //uncomment these two lines to fix 
    private int[,] cellidsallowed; 

    public int[,] Cellidsallowed   
    { get { return cellidsallowed; } 
     set { cellidsallowed = value; }   
    } 
} 
+0

Мне потребовалось некоторое время, чтобы прокомментировать/расколоть все, чтобы вернуть его обратно. К сожалению, он по-прежнему не работал с той же ошибкой, что и при сохранении настроек. – metinoheat

+0

, основанный на том, что вы опубликовали, и что я пытался упростить для вас .. вам нужно показать больше кода .. где процедура 'save settings' ...? – MethodMan

+0

Несомненно. добавлено обновление выше. Я просто использую функцию properties.settings.default.save(). другие настройки сохраняются, но этого нет, и это определенно из-за этого int [,] вещь. – metinoheat

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