从List <string>集合中检索奇数值并将其保存为GUID c#</string>

时间:2010-08-26 12:59:22

标签: c# list guid

我正在尝试检索字符串List中的奇数值并将它们转换为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值保存为字符串。我打印出List并确保了

由于

3 个答案:

答案 0 :(得分:1)

您经常打印对象,请尝试以下方法:

    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);
    }

答案 1 :(得分:1)

我认为Grzenio的答案是正确的,但我不认为你理解为什么。详细说明一下,举个简单的例子:

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);

}

答案 2 :(得分:0)

如果你可以使用Linq,试试这个:

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

使用包含索引的.Select()重载。您最终会得到Guid的iEnumerable,其中Guid.Empty代表非Guids。

此外,您可能希望使用TryParseGuid方法(您必须自己创建/找到类似this one的方法)以确保它们实际上是Guid