Как я сохраняю/сериализирую пользовательский класс в файл настроек?

Ничего себе, это действительно выглядит глупым, не так ли?

проблема состоит в том, что - согласно книге Microsoft Press ".NET Ассемблер IL" Lidin - rem IL и отделение atithmetic инструкции точно что: вычислите остаток и вычислите делитель.

Все арифметические операции кроме операции отрицания берут два операнда от стека и помещают результат на стек.

, По-видимому, способ, которым разработан ассемблерный язык IL, не возможно иметь инструкцию IL, которая производит два вывода и продвигает их на стопку оценки. Учитывая, что ограничение, у Вас не может быть инструкции подразделения в ассемблере IL, который вычисляет обоих путь, x86 DIV или инструкции IDIV делают.

IL был разработан для безопасности, verifiability, и устойчивости, НЕ для производительности. Любой, кто имеет вычисление - интенсивное приложение и заинтересован, прежде всего, с производительностью, будет использовать собственный код и не.NET.

я недавно посетил Супервычисления '08, и на одном из технических семинаров, евангелист для Microsoft Compute Server дал грубое эмпирическое правило, что.NET обычно была половиной скорости собственного кода - который точно имеет место здесь!.

19
задан Welbog 24 August 2009 в 14:22
поделиться

3 ответа

Хорошо, я думаю, что в конце концов у меня получилось. Первое, что нужно сделать, - это добавить следующие атрибуты к каждому свойству класса ReportType, которое необходимо сериализовать и унаследовать класс от ApplicationSettingsBase:

    public class ReportType : ApplicationSettingsBase
    {
        private string displayName;
        [UserScopedSetting()]
        [SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
        public string DisplayName
        {
            get { return displayName; }
        }

..............

а затем, как только вы перестроили свою сборку (важно!), вы можете перейти на экран настроек и нажать кнопку «Обзор», а затем ввести свое пространство имен и имя класса в текстовое поле внизу (например, Label_Creator.ReportType). Пространство имен и имя класса не отображаются в дереве, поэтому эта часть не совсем очевидна, что вам нужно делать, поэтому это немного сбивает с толку ....

18
ответ дан 30 November 2019 в 04:29
поделиться

How about creating a static method which returns an instance of ReportType containing data from the config file. It's simpler and I don't think serializing is necessary.

public class ReportType
{
  public static ReportType GetDefaultSelectedReportType()
  {
    string displayName = ConfigurationManager.AppSettings["DefaultDisplayName"];
    string reportName = ConfigurationManager.AppSettings["DefaultReportName"];
    return new ReportType(displayName, reportName);
  }
  .
  .
  .
}
2
ответ дан 30 November 2019 в 04:29
поделиться

Just a bit more clear code then Charlie's

public class ReportType
{
  public static ReportType CreateDefaults()
  {
    return new ReportType
    {
       DisplayName =  ConfigurationManager.AppSettings["DefaultDisplayName"],
       ReportName = ConfigurationManager.AppSettings["DefaultReportName"]
    };
  }
}
2
ответ дан 30 November 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: