Цикл по значению внутри свойства, которое присутствует внутри структуры - PullRequest
2 голосов
/ 30 марта 2020

Я создал структуру, которая имеет некоторые свойства, такие как

public struct DeviceDetailModel
{
  public static readonly DeviceDetailModel DT851P = new DeviceDetailModel("851P","v1","v2");
  public static readonly DeviceDetailModel DT852P = new DeviceDetailModel("852P","v3","v4");
  public static readonly DeviceDetailModel DT83P = new DeviceDetailModel("853P","v5","v6");
  public static readonly DeviceDetailModel DT854P = new DeviceDetailModel("854P");


 public string DeviceName { get; private set; }
 public string Value1 { get; private set; }
 public string Value2 { get; private set; }

 private DeviceDetailModel(string deviceName,string value1,string value2)
 {
  DeviceName = deviceName;
  Value1 = value1;
  Value2 = value2;
 }
}

. Теперь, если я хочу получить подробную информацию об одном элементе, это просто, мне просто нужно было сделать DeviceDetailModel.DT854P

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

например, = мое значение времени выполнения равно 853P Я хочу l oop поверх моей структуры, чтобы определить, где в DeviceName соответствует этому значению 853P и что должно возвращать DeviceDetailModel.DT83P

Я смог l oop по свойствам структуры, но не смог получить значение

Редактирование: Исходя из моего значения времени выполнения, мне нужно перебрать значение DeviceName и, если значение совпадает, должно вернуть связанное свойство

1 Ответ

1 голос
/ 30 марта 2020

Вот один довольно простой вариант:

public struct DeviceDetailModel
{
    private static readonly Dictionary<string, DeviceDetailModel> models = new Dictionary<string, DeviceDetailModel>
    {
        {"851P", new DeviceDetailModel("851P")},
        {"852P", new DeviceDetailModel("852P")},
        {"853P", new DeviceDetailModel("853P")},
        {"854P", new DeviceDetailModel("854P")},
    };

    public static DeviceDetailModel DT851P get => models["851P"];
    public static DeviceDetailModel DT852P get => models["852P"];
    public static DeviceDetailModel DT83P get => models["853P"];
    public static  DeviceDetailModel DT854P get => models["854P"];

    private DeviceDetailModel(string deviceName)
    {
        DeviceName = deviceName;
    }

    public string DeviceName {get;private set;}

    public DeviceDetailModel? FindByDeviceName(string deviceName)
    {
        return models.TryGetValue(deviceName, out var value) ? value : (DeviceDetailModel)null;
    }
}

Обратите внимание, что возвращаемое значение FindByDeviceName равно Nullable<DeviceDetailModel>, поэтому, если вы ищете строку, которая не найдена, вы не получите исключение , но null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...