首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Guid/Guid互操作的枚举

Guid/Guid互操作的枚举
EN

Stack Overflow用户
提问于 2011-03-25 02:28:19
回答 2查看 6K关注 0票数 3

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

基本上我试着把代码

代码语言:javascript
复制
#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

(和其他几个类似的)

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

如果能做一些像这样的事情就好了

代码语言:javascript
复制
enum MyGuids : Guid
{
  Guid1 = GUID("...") or just "..."
}

我可以改用类/结构。

代码语言:javascript
复制
static class MyGuids
{
    public static Guid flag1 = new Guid("9ED54F84-A89D-4fcd-A854-44251E925F09");
}

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

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2011-03-25 02:47:20

Guids是.NET中的结构,它们太大了,无法以两倍的因子适应简单的值类型。在我看来,您需要初始化一个结构成员。这将需要在您的代码中使用赋值语句。const可以很好地完成这项工作。否则就没有办法让编译器自动完成这项工作。

代码语言:javascript
复制
  var sound = new foo();
  sound.waveFormat = MyGuids.flag1;
  // etc..
票数 1
EN

Stack Overflow用户

发布于 2019-01-17 02:16:30

像这样怎么样?

代码语言:javascript
复制
void Main()
{
    var dog = MyValues.Dog.ToId();  
    var cat = MyValues.Cat.ToId();  
    var bird = MyValues.Bird.ToId();    
}

public enum MyValues
{ 
    Dog,
    Cat,
    Bird
}

public static class Functions
{
    public static Guid ToId(this MyValues value)
    {
        switch (value)
        {
            case MyValues.Dog:
                return Guid.Parse("6d139d6a-2bfa-466d-a9a5-c6e82f9abf51");
            case MyValues.Cat:
                return Guid.Parse("AA139d6a-2bfa-466d-a9a5-c6e82f9abf51");
            case MyValues.Bird:
                return Guid.Parse("BB139d6a-2bfa-466d-a9a5-c6e82f9abf51");
            default:
                throw new InvalidDataException();
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5423733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档