相关疑难解决方法(0)

测试字符串是否为guid而不抛出异常?

我想尝试将字符串转换为Guid,但我不想依赖捕获异常(

  • 出于性能原因 - 例外是昂贵的
  • 出于可用性原因 - 弹出调试器
  • 出于设计原因 - 预期并非例外

换句话说代码:

public static Boolean TryStrToGuid(String s, out Guid value)
{
    try
    {
        value = new Guid(s);
        return true;
    }
    catch (FormatException)
    {
        value = Guid.Empty;
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

不适合.

我会尝试使用RegEx,但由于guid可以括号括起来,括号包裹,没有包装,使其变得困难.

另外,我认为某些Guid值无效(?)


更新1

ChristianK有一个好主意只能抓住FormatException,而不是全部.更改了问题的代码示例以包含建议.


更新2

为什么要担心引发异常?我真的经常期待无效的GUID吗?

答案是肯定的.这就是为什么我使用TryStrToGuid -我期待坏数据.

示例1 可以通过将GUID附加到文件夹名称来指定名称空间扩展.我可能正在解析文件夹名称,检查最终后是否有文本.是一个GUID.

c:\Program Files
c:\Program Files.old
c:\Users
c:\Users.old
c:\UserManager.{CE7F5AA5-6832-43FE-BAE1-80D14CD8F666}
c:\Windows
c:\Windows.old
Run Code Online (Sandbox Code Playgroud)

示例2我可能正在运行一个使用频繁的Web服务器,想要检查一些发布的数据的有效性.我不希望无效数据占用比需要高2-3个数量级的资源.

示例3我可能正在解析用户输入的搜索表达式.

在此输入图像描述

如果他们输入GUID,我想特别处理它们(例如专门搜索该对象,或在响应文本中突出显示并格式化该特定搜索词.)


更新3 - 性能基准

测试转换10,000个好Guids和10,000个坏Guids.

Catch FormatException: …
Run Code Online (Sandbox Code Playgroud)

c# string parsing guid

180
推荐指数
10
解决办法
7万
查看次数

标签 统计

c# ×1

guid ×1

parsing ×1

string ×1