gpt4 book ai didi

c# - GUID/Guid 互操作的枚举

转载 作者:行者123 更新时间:2023-11-30 18:05:35 34 4
gpt4 key购买 nike

我正在做一些互操作,需要传递一些 GUID。有没有办法将 GUID 属性添加到枚举值,并且当它被编码时它具有适当的值?

基本上我正在尝试转换代码

#if !defined( STATIC_KSDATAFORMAT_SUBTYPE_PCM )
#define STATIC_KSDATAFORMAT_SUBTYPE_PCM\
DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_PCM)
DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_PCM);
#define KSDATAFORMAT_SUBTYPE_PCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PCM)
#endif

(以及其他几个类似的)

并在枚举中使用它们,这样我就可以轻松指定适当的子类型格式。显然,我可能只使用字典或其他类似方法,但我想让它尽可能透明。

做这样的事情会很好

enum MyGuids : Guid
{
Guid1 = GUID("...") or just "..."
}

我可以改用类/结构

static class MyGuids
{
public static Guid flag1 = new Guid("9ED54F84-A89D-4fcd-A854-44251E925F09");
}

但这里唯一的问题是无法将非托管结构中的 Guid 与此类相关联。它被指定为 Guid,如果我用 MyGuids 替换它,那么它将不再是 Guid。例如,我失去了类型安全性,因为任何 guid 都可能出现在该字段中,而不仅仅是来自 MyGuid 的。

有什么想法吗?

最佳答案

Guids 是 .NET 中的结构,它们太大而无法放入简单的值类型中两倍。在我看来,您需要初始化一个结构成员。这将需要您的代码中的赋值语句。 const 将为此工作得很好。否则无法让编译器自动执行此操作。

  var sound = new foo();
sound.waveFormat = MyGuids.flag1;
// etc..

关于c# - GUID/Guid 互操作的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423733/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com