在C#中打开Guid的最有效方法

Joh*_*ell 11 c# performance guid

所以在C#中,switch语句只支持整数类型(不是Guids),所以一个简单的O(1)比较表看起来不可能.

什么是计算效率最高的Guid匹配方式

起初我想

if(gMyGuid == new Guid("VALUE"))
else if (gMyGuid == new Guid("VALUE2")
else if (gMyGuid == new Guid("VALUE3")
...
else if (gMyGuid == new Guid("VALUEn")
Run Code Online (Sandbox Code Playgroud)

但是,通过这样做,我每次都要创建一个新的Guid实例进行比较.我可以将Guid转换为字符串然后比较字符串,但字符串比较是一个很长的字符串用于比较.

感谢任何建议.

O. *_*per 17

您可以创建一个对您有用的地方.System.Collections.Generic.Dictionary<Guid, ...>...

程序启动时,使用您需要识别的guid和值填充字典.

然后,使用TryGetValue字典的方法通过其guid检索值.

我没有说明任何文字,...因为我不知道你想用guid做什么.也许你想运行一些函数,然后一个方法指针(Func<T>或类似的东西)可能是合适的,或者是一个提供你想要调用的方法的接口类型.这取决于比较代码的guid的上下文/目的.

  • 如果你没有真正需要匹配的值,你可以使用`HashMap <Guid>`而不是`Dictionary`.但是,我怀疑你这样做是因为你在if/else链中使用它. (4认同)

Man*_*pel 5

在c#7中,您现在可以为此使用带模式匹配的开关。

switch (gMyGuid )
{
    case var g when (g == new Guid("VALUE")):
        break;
    case var g when (g == new Guid("VALUE2")):
        break;
    case var g when (g == new Guid("VALUEN")):
        break;
    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

如果您已定义静态只读新Guid“ ..”)变量,则此方法也适用。