我可以在.Net中创建或生成无效的System.Guid吗?

时间:2014-01-31 14:46:48

标签: c# .net vb.net guid

可以以某种方式在.Net(Visual Basic或C#)中创建无效的System.Guid对象。我知道Guid.Empty方法,但它不是我要搜索的。例如,无效的符号或空格,或者太短或长于有效符号或空格等。 谢谢!

4 个答案:

答案 0 :(得分:5)

  

Guid是否可以使用无效符号或空格创建,或者是否太短或长于有效符号?

否 - Guid只是一个128位数字,可以用4组十六进制数字表示Guid的字符串表示无法包含除32个十六进制字符(以及3个破折号)以外的任何内容。

您可以创建一个不代表有效Guid字符串,但无法将其放入Guid对象。

答案 1 :(得分:1)

您可以使用Guid.TryParse

string[] guids = { "cd334e7e-7370-4d2f-8276-25d08e582da7", "Foo" };
Guid newGuid;
foreach (string guidString in guids)
{
    if (Guid.TryParse(guidString, out newGuid))
        Console.WriteLine("Converted {0} to a Guid", guidString);
    else
        Console.WriteLine("Unable to convert {0} to a Guid", guidString);
}

输出:

Converted cd334e7e-7370-4d2f-8276-25d08e582da7 to a Guid
Unable to convert Foo to a Guid

编辑:“我需要的是不测试Guid是否有效,但是如果我能够创建一个无效的并且在单元测试中将其作为方法参数传递,例如。 “

因此,您需要找到一种方法将“无效”Guid传递给方法。我建议改为使用Nullable<Guid>

public static void Foo(Guid? guid)
{
    if (guid.HasValue)
    {
        Guid g = guid.Value;
        // ...
    }
    else
    {
        // ...
    }
}

现在您可以通过以下方式使用此方法:

Foo(null);                  // will be a Guid? without a value
Foo(new Nullable<Guid>());  // will be a Guid? without a value
Foo(Guid.NewGuid());
Foo(Guid.Empty);
Foo(guidVariable);

答案 2 :(得分:1)

无效对你意味着什么?这是由您的代码可以处理的内容定义的。 Guid只有16个任意字节,没有任何强制格式。 定义了您想接受的Guid种类。

从这个意义上讲,任何Guid对象本身都是有效的。这个结构没有无效状态。

就像int。任何int都有效。

答案 3 :(得分:1)

您应该可以使用constructor for Guid:

来执行此操作
Guid badGuid = new Guid("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz");

如果这会引发异常,那么这意味着运行时将不允许您构造无效的Guid,并且您不需要测试该场景。请注意,根据文档,必须给出正确的字符数,因此这种情况绝对不可测试。另外一点,您确定要测试代码的行为,因为听起来您正在尝试为极其特定的框架功能编写测试,这不是单元测试代码的目的。