C# 如何在c中检查枚举是否属于某种类型?

C# 如何在c中检查枚举是否属于某种类型?,c#,.net,C#,.net,我有一个泛型函数,它接收一个参数类型T,它被强制为一个结构。我想知道如何检查特定枚举类型的类型是否已声明,我正在执行以下操作: 公共静态字符串GetSomething,其中T:struct { 开关类型 { 当EnumTypeA==typeofT时,案例类型EnumTypeA: Console.WriteLineis EnumTypeA; 打破 当EnumTypeB==typeofT时,案例类型EnumTypeB: Console.WriteLineis EnumTypeB; 打破 违约: Ty

我有一个泛型函数,它接收一个参数类型T,它被强制为一个结构。我想知道如何检查特定枚举类型的类型是否已声明,我正在执行以下操作:

公共静态字符串GetSomething,其中T:struct { 开关类型 { 当EnumTypeA==typeofT时,案例类型EnumTypeA: Console.WriteLineis EnumTypeA; 打破 当EnumTypeB==typeofT时,案例类型EnumTypeB: Console.WriteLineis EnumTypeB; 打破 违约: Type=typeofT; 返回新异常$Unsupported type{type.GetTypeCodetype}; } } 但我总是得到EnumTypeA,即使我发送EnumTypeB

这是我理想的做法:

开关类型 { 病例为A型 Console.WriteLineis EnumTypeA; 打破 病例为B型 Console.WriteLineis EnumTypeB; 打破 违约: Type=typeofT; 返回新异常$Unsupported type{type.GetTypeCodetype}; } 看看这个案例:

当EnumTypeA==typeofT时,案例类型EnumTypeA: 这总是正确的,因为您正在打开TypeSoft,它与名为EnumTypeA的类型完全无关。这相当于:

t==typeofT时的案例类型t: 你真正想要的是:

当t==typeofEnumTypeA时的案例类型t: 比如说:

开关类型 { 当t==typeofEnumTypeA时的案例类型t: Console.WriteLineis EnumTypeA; 打破 当t==typeofEnumTypeB时的案例类型t: Console.WriteLineis EnumTypeB; 打破 违约: Type=typeofT; 返回新异常$Unsupported type{type.GetTypeCodetype}; } 就我个人而言,我可能更喜欢在这种情况下使用if/else,或者可能使用静态字典,但如果不了解更多关于真实场景的信息,很难说清楚。

看看这个例子:

当EnumTypeA==typeofT时,案例类型EnumTypeA: 这总是正确的,因为您正在打开TypeSoft,它与名为EnumTypeA的类型完全无关。这相当于:

t==typeofT时的案例类型t: 你真正想要的是:

当t==typeofEnumTypeA时的案例类型t: 比如说:

开关类型 { 当t==typeofEnumTypeA时的案例类型t: Console.WriteLineis EnumTypeA; 打破 当t==typeofEnumTypeB时的案例类型t: Console.WriteLineis EnumTypeB; 打破 违约: Type=typeofT; 返回新异常$Unsupported type{type.GetTypeCodetype}; }
就我个人而言,我可能更喜欢在这种情况下使用if/else,或者可能使用静态字典,但如果不了解更多真实情况,就很难说。

谢谢,我没有正确使用案例行,有两个以上的案例a和B。实际上我有4个,所以我认为切换会更好。但不遵循Dictionary选项。@love2code:您应该为每种类型创建一个字典,其中包含一个委托,用于在显示该类型时要执行的操作。switch语句肯定会起作用-每次都以相同的方式使用它来匹配,感觉有点奇怪,只是使用了不同的guard子句。是的,当t==typeofEnumTypeB时,我不喜欢这种语法类型t,但字典还不完全清楚,所以在字典中我将使用枚举类型和回调操作,但我怎样才能避免这种方法的转变呢?我仍然需要知道哪个是枚举,对吗?不管怎样,我在这个由Pavel公开的解决方案中看到了它。多亏了这两种方法,我没有正确地使用案例行,有2个以上的案例A和B。实际上我有4个,所以我认为切换会更好。但不遵循Dictionary选项。@love2code:您应该为每种类型创建一个字典,其中包含一个委托,用于在显示该类型时要执行的操作。switch语句肯定会起作用-每次都以相同的方式使用它来匹配,感觉有点奇怪,只是使用了不同的guard子句。是的,当t==typeofEnumTypeB时,我不喜欢这种语法类型t,但字典还不完全清楚,所以在字典中我将使用枚举类型和回调操作,但我怎样才能避免这种方法的转变呢?我仍然需要知道哪个是枚举,对吗?不管怎样,我在这个由Pavel公开的解决方案中看到了它。这个问题似乎是一个完全相同的问题,有不同的选项来解决问题。这个问题似乎是一个完全相同的问题,有不同的选项 解决问题