我可以依赖 GUID 不能解析为 int 吗?

Can I rely on GUID to be not parseable to int?

我有一个实体,它有一个字段,该字段可以是存储为字符串或 GUID 的整数。我根据该字段是 GUID 还是整数来执行不同的方法。如果值是 GUID,我可以确定 int.TryParse 总是 return false 吗?GUID.NewGuid() return 是一个可解析的整数吗?

根据规范,GUID 始终包含破折号来分隔整数块。这意味着除非您有意删除破折号,否则它永远不会被解析为整数。

除了禁止将一个值解析为另一个值之外,您还可以通过 .getClass() 方法检查当前 GUID 的类型,这也不太容易出现异常。

Int 是 Guid 的子集,没有 braces/dashes/other 垃圾。在 C# 中,您可以先尝试解析 Guid,然后再尝试解析整数。 Guid 是比整数更严格的概念,因此它不会跳过这样的情况(不是整数类型):

00000000000000000000200

public static object ParseUid(string inputString)
{

    if(Guid.TryParse(inputString, out guidOutput))
        return guidOutput;
    if(int.TryParse(inputString, out intOutput))
        return intOutput;
    throw new NotSupportedException(inputString);

}

a) 即使 GUID 中没有字母(它总是有),它也有破折号,而且它的长度对于整数来说非常长,所以你可以相信它不能解析为 int:

if(int.TryParse(key, out int result)
{
    //use result
}
else
{
    // use the key
}