извлечение нечетных значений из коллекции List <string>и сохранение их как GUID c # - PullRequest
1 голос
/ 26 августа 2010

Я пытаюсь получить нечетные значения в списке строк и преобразовать их в объект Guid. Вот что я придумал

        Guid oGuid = new Guid();
        string objectName = string.Empty;

        for (int i = 0; i < lst_objectName_Guid.Count; i++)
        {
            if (i % 2 != 0) //The GUID values are in the Odd-Numbered Indexses
            {
                oGuid = new Guid(lst_objectName_Guid[i]); //Convert the GUID Values from string to Guid
            }
            else
            {
                objectName = lst_objectName_Guid[i];    //Assign the objectName Values into a string variable
            }

            Console.WriteLine(objectName);
            Console.WriteLine(oGuid);

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

Кто-нибудь может сказать мне, что происходит и почему? и если есть лучший способ получить индексы odd_numbered и сохранить их как GUID

Я почти уверен, что нечетные индексы содержат значения Guid в виде строк. Я распечатал список и убедился в этом

Спасибо

Ответы [ 3 ]

1 голос
/ 26 августа 2010

Я думаю, что ответ Грзенио верен, но я не думаю, что вы понимаете, почему. Чтобы уточнить, возьмите этот простой пример:

string Part1 = "";
string Part2 = "";

for (int i = 0; i < 2; i++)
{
    if (i == 0)
    {
        Part1 = "Set on first iteration";
    }
    else
    {
        Part2 = "Set on second iteration";
    }
}

Теперь, это точно , что вы сделали. На первой итерации цикла (i==0) вы только устанавливаете первую переменную Part1. Таким образом, результат будет:

Part1: "Set on first iteration"
Part2: ""

На второй итерации (i==1) для Part2 будет установлено значение, а затем будет выведено:

Part1: "Set on first iteration"
Part2: "Set on second iteration"

Итак, взяв ваш пример:

Guid oGuid = new Guid(); // Equals all 0s by default
string objectName = string.Empty;

objectName устанавливается на первой итерации, но oGuid не . Поэтому oGuid остается "всеми нулями" (Guid.Empty).

Итак, это должен быть код, который вы используете:

Guid oGuid = new Guid();
string objectName = string.Empty;

for (int i = 0; i < lst_objectName_Guid.Count; i+=2)
{

    // Notice how BOTH variables are assigned
    oGuid = new Guid(lst_objectName_Guid[i]); 
    objectName = lst_objectName_Guid[i + 1];

    // So when they're written to the console, they both have values
    Console.WriteLine(objectName);
    Console.WriteLine(oGuid);

}
1 голос
/ 26 августа 2010

Вы печатаете свои объекты слишком часто, попробуйте этот подход:

    Guid oGuid = new Guid();
    string objectName = string.Empty;

    for (int i = 0; i +1 < lst_objectName_Guid.Count; i+=2)
    {
        objectName = lst_objectName_Guid[i];
        oGuid = new Guid(lst_objectName_Guid[i+1]); //Convert the GUID Values from string to Guid


        Console.WriteLine(objectName);
        Console.WriteLine(oGuid);
    }
0 голосов
/ 26 августа 2010

Если вы можете использовать Linq, попробуйте это:

lst_objectName_Guid.Select((item, index) => index % 2 != 0 ? new Guid(item) : Guid.Empty);

Использует перегрузку .Select(), включающую индекс. Вы получите iEnumerable Guid s, с Guid.Empty для не-Guids.

Кроме того, вы можете использовать метод TryParseGuid (вам придется создать свой собственный / найти такой, как этот ), чтобы убедиться, что они действительно Guid s.

...