Получение и установка значений в простых коллекциях и списках - C # - PullRequest
0 голосов
/ 15 мая 2018

Я работаю над настольным приложением, после того как некоторое время нахожусь вне мира разработчиков приложений, и я работаю над своим C # вместо использования VB.Пришло время модернизироваться, так что извините за недостаток концептуальных знаний в ответах.Я последний раз занимался серфингом в SOF и обнаружил, что нельзя использовать массивы глобальных переменных, как мы это делали в VB6 ... и он указывает на использование списка.Цель состоит в том, чтобы создать список классов и добавить / обновить значения.

Я немного искал вокруг, нашел несколько отличных примеров и далеко продвинулся, однако я стал слишком много следовать за желтой лампочкой.Теперь я почти застрял.Не говорю, что я не понимаю, но мне нужно знать, как ссылаться на конкретные значения в списке.

Например:

public class WSettings
{
    public string SettingName { get; set; }
    public string SettingVal { get; set; }

    public static void Main()
    {
       List<WSettings> wSettings = new List<WSettings>();
       wSettings.Add(new WSettings { SettingName = "Port", SettingVal = "8080" });
       wSettings.Add(new WSettings { SettingName = "UpdateInterval", SettingVal = "60" });
       wSettings.Add(new WSettings { SettingName = "Baud", SettingVal = "9600" });
       wSettings.Add(new WSettings { SettingName = "bits", SettingVal = "8" });
       wSettings.Add(new WSettings { SettingName = "stopbits", SettingVal = "1" });
       wSettings.Add(new WSettings { SettingName = "parity", SettingVal = "no" });
        }

 }

Я начал здесь.Но, скажем, я хотел обновить «Порт» до «8181», мне нужно было бы создать быструю функцию для этого, чтобы я мог вызывать его из другой части приложения.

public string GetSettingValByName()
{
    return wSetting.SettingName("Port").SettingValue;
}

public void SetValueByName(string settingvalue, string SettingName)
{
    wSetting.Settingvalue("Port") = settingvalue;
}

Вопрос в том, как бы я ссылался Settingval на SettingName в этих примерах?Код, который я опубликовал, я знаю, не работает, но я предполагаю, что это близко к тому, как это должно быть сделано.Я ищу конкретный код для запроса с использованием строки "Порт", например .. GetValueByName("Port") возвращает SettingVal из "8080" или установить значение для "Порт".

Следующий вопросЯ читал кое-что о том, если класс определенно будет списком, а затем сделать его списком .. или коллекцией, например ..

public class AppName1: List<Wsettings>

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

Спасибо всем

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

SetPort будет выглядеть примерно так:Словарь Это быстрее, чем список.

0 голосов
/ 15 мая 2018

Вы можете использовать словарь для поиска значений по ключу (SettingName).Однако я не думаю, что это лучший подход.Вы, вероятно, не хотите ссылаться на все настройки волшебными строками.Кроме того, вы бы выиграли, сохраняя целочисленные значения в виде целых чисел вместо строк.Логические значения должны храниться как логические значения и т. Д.

Я бы создал новый класс в отдельном файле, из которого находится Main.

CommunicationSettings.cs

namespace MyNameSpace
{
    class CommunicationSettings
    {
      public int Port;
      public int UpdateInterval;      
      public int BaudRate;      
      public int Bits;      
      public int StopBits;      
      public bool Parity;
    }
}

В ProgramName.cs

namespace MyNameSpace
{
    class Program
    {
       static void Main()
       {
         CommunicationSettings communicationSettings = new CommunicationSettings();
         communicationSettings.Port = 8081;
         //repeat for all settings
       }
    }
}

Вы также можете инкапсулировать значения следующим образом:

class CommunicationSettings
{
  private int port;
  private int updateInterval;
  private int baudRate;
  private int bits;
  private int stopBits;
  private bool parity;

  public int Port { get { return port; } set { port = value; } }
  public int UpdateInterval { get { return updateInterval; } set { updateInterval = value; } }
  public int BaudRate { get { return baudRate; } set { baudRate = value; } }
  public int Bits { get { return bits; } set { bits = value; } }
  public int StopBits { get { return stopBits; } set { stopBits = value; } }
  public bool Parity { get { return parity; } set { parity = value; } }
}

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

Если в вашем приложении есть только 1 копия этих настроек, рассмотрите возможность использования SingletonШаблон выглядит следующим образом:

class CommunicationSettings
{
  private int port;
  private int updateInterval;
  private int baudRate;
  private int bits;
  private int stopBits;
  private bool parity;

  public int Port { get { return port; } set { port = value; } }
  public int UpdateInterval { get { return updateInterval; } set { updateInterval = value; } }
  public int BaudRate { get { return baudRate; } set { baudRate = value; } }
  public int Bits { get { return bits; } set { bits = value; } }
  public int StopBits { get { return stopBits; } set { stopBits = value; } }
  public bool Parity { get { return parity; } set { parity = value; } }


  static CommunicationSettings _TheSettings = null;

  public static CommunicationSettings TheSettings
  {
    get
    {
      if (_TheSettings == null)
      {
        _TheSettings = new CommunicationSettings();
      }
      return _TheSettings;
    }
  }
}

Теперь вы можете использовать его таким же образом в других частях кода.

CommunicationSettings settings = CommunicationSettings.TheSettings;
settings.Port = 8081;
0 голосов
/ 15 мая 2018

Похоже, вы имеете дело с парами ключ / значение.Для данных такого типа рассмотрите возможность использования Dictionary, поскольку в нем уже есть много функций, которые вы ищете.

class Program
{
    static Dictionary<string, string> settings = new Dictionary<string, string>();

    static void Main()
    {
        settings["Port"] = "8080";
        settings["UpdateInterval"] = "60";
        settings["Baud"] = "9600";
        settings["bits"] = "8";
        settings["stopbits"] = "1";
        settings["parity"] = "no";

        // Update a setting
        settings["Port"] = "8081";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...