C# Хранение и получение свойств объекта в хеше - PullRequest
0 голосов
/ 26 февраля 2020

Я собираюсь создать переменные даты и строки, которые мне нужно будет отсортировать по времени. В этом наборе информации должны быть добавлены и удалены записи при запуске сценария. Основываясь на моих исследованиях, кажется, что жизнеспособным методом для достижения sh было бы создание хеш-таблицы, которая использует ключ для создания значения времени эпохи со связанным пользовательским классом, который имеет свойства для информации DateTime и String. Это позволило бы мне отсортировать га sh по ключу, и я могу добавлять и удалять элементы из хеш-таблицы по мере необходимости. Пользовательский класс, который я создал, - это Executor ниже.

public class Executor {
    public DateTime StartTime  { get; set; }
    public string Name  { get; set; }
    public string Executable  { get; set; }
    public Executor(DateTime starttime, string name, string executable) {
        StartTime = starttime;
        Name = name;
        Executable = executable;
    }       
}

С этим классом я могу создать al oop для создания и добавления экземпляров в хеш-таблицу для различных разрешенных в то время l oop. Приведенный ниже код создает информацию, которая должна храниться в хеш-таблице, и принимает список, который обеспечивает ввод правил для генерации ha sh. Некоторый код, который определяет времена и циклы в списке, для простоты удален из приведенного ниже примера.

static void CreateScriptScehdule(List<Script> scriptList) {
    // Declare and initialize variables
    Hashtable htExecutionList = new Hashtable();

    // Code to create a list of the times and manage the item properties
    ...
    ...

    // Create a loop to define the exeuction times of the script between the start and stop time.
    //  use a tempTime to compare to the stop time
    while (DateTime.Compare(tempTime,timeStop) < 0) {
        // Create an object for the executable based on the script rules
        Executor exe = new Executor(tempTime,item.Name,item.Executable);

        // Add the executable object to the hashtable htExecutionList
        double exeTimeEpoch = ttoe(tempTime);
        exeKey = exeTimeEpoch.ToString() + item.Name;
        htExecutionList.Add(exeKey,exe);
    }

    // Loop through the hashtable to print out the stored information to verify the creation for debugging
    foreach (DictionaryEntry s in htExecutionList) {
        //Console.WriteLine(s.Value);
    }
}

Когда я проверяю значение s.Value, я получаю значение ReceiveConfigFile.Executor. Это заставляет меня поверить, что объект Executor be be сохраняется из сценария ReceiveConfigFile, но когда я пытаюсь получить такие свойства, как StartTime или Name , я получаю сообщение об ошибке. Я пытался напечатать значение как s.Value.Name , думая, что я могу получить свойство объекта. Я получаю ошибку:

error CS1061: 'System.Collection.DictionaryEntry' does not contain a definition for 'Namel accepting a first argument of type 'System.Collections.DictionaryEntry' could be found (are you missing a using directive or an assembly reference)

1 Ответ

0 голосов
/ 12 марта 2020

Мне удалось достичь sh моей цели для этого с помощью объекта, который использует строку для ключа и пользовательский класс для значения. Один элемент, который вызвал у меня некоторые проблемы с началом работы, заключался в том, что мне нужно было загрузить System.Collections.Generi c.

using System.Collections.Generic;

Сначала я начал с инициализации словаря как строкового ключа с помощью класса Executor. в качестве значения.

Dictionary<string, Executor> ExecutionDict = new Dictionary<string, Executor>();

Затем мне нужно было определить ключ как уникальное значение, поэтому я создал переменную, связанную с указанным c временем и описанием, чтобы знать, что он никогда не дублировался даже если времена были связаны. Переменная exe хранит экземпляр класса Executor с переменными, которые были определены ранее в коде. В последней строке добавлена ​​запись в словарь. У меня был этот код в al oop, поэтому я мог продолжать добавлять одни и те же переменные с новыми значениями каждый раз.

While (condition) {
    Executor exe = new Executor(tempTime,item.Name,item.Executable);
    exeKey = exeTimeEpoch.ToString() + item.Name;
    ExecutionDict.Add(exeKey,exe);
}

Наконец, я создал al oop через словарь, чтобы найти все экземпляры и распечатали значение для проверки создания переменной.

foreach(KeyValuePair<string,Executor> temp in ExecutionDict)  {
    Console.WriteLine("For the Key {0} the Name is {1} and the Name is {2} and the Name is {3}", temp.Key, temp.Value.Name, temp.Value.Executable, temp.Value.StartTime);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...