我可以依赖 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
}
我有一个实体,它有一个字段,该字段可以是存储为字符串或 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
}