我想尝试将字符串转换为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) 我正在跟踪" 下载"按钮,点击具有此项代码的我的项目的网站:
function trackDownload(link) {
try {
_gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']);
setTimeout('document.location = "' + link.href + '"', 100);
} catch (err) {}
return false;
}
Run Code Online (Sandbox Code Playgroud)
按钮是这样的:
<a href="files/setup.exe" onclick="return trackDownload(this);">Download</a>
Run Code Online (Sandbox Code Playgroud)
因此,当用户单击它时,会将事件推送到Google Analytics,然后将用户重定向到该文件.
这也适用于外部链接跟踪,没有差异.
现在我的问题.我可以确定在用户重定向之前"处理"了Google Analytics事件吗?如果没有,那重定向会导致事件丢失?目前,事件正在被跟踪,但我不能肯定所有的人都.
我读过我也可以尝试一些不同的东西,将重定向功能推送到Analytics队列:
_gaq.push(function() { document.location = link.href; });
Run Code Online (Sandbox Code Playgroud)
但目前尚不清楚这是否有效,或者它是否与前一个相同.事实上,这里说"调用_gaq.push [...]执行命令".