我正在做一些互操作,需要传递一些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的guid。
有什么想法吗?
发布于 2011-03-25 02:47:20
Guids是.NET中的结构,它们太大了,无法以两倍的因子适应简单的值类型。在我看来,您需要初始化一个结构成员。这将需要在您的代码中使用赋值语句。const可以很好地完成这项工作。否则就没有办法让编译器自动完成这项工作。
var sound = new foo();
sound.waveFormat = MyGuids.flag1;
// etc..发布于 2019-01-17 02:16:30
像这样怎么样?
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();
}
}
}https://stackoverflow.com/questions/5423733
复制相似问题