【发布时间】:2025-12-16 20:35:01
【问题描述】:
我有一个案例,我有几组数字(寄存器值)。我想提高可读性并检查适当的类型(只有某些值在某些函数中才有意义)。
在我的特定实现中,我将它们设为枚举 - 所以我现在有一组枚举。
现在我似乎已经结束了这种方法,因为我想将它们划分为某些应用程序的有效枚举集 - 因此函数 A 可以例如将 enumA、enumB 和 enumC 中的值作为输入,但不是 enumD,它是对不同功能的描述。
我已经研究过接口中的枚举和枚举继承——两者都是死胡同,在 C# 中是不可能的。
我现在想知道如何解决这个问题。我想对可能的值进行智能感知,并且还具有一些类型安全性,这样我就不能(好吧,至少在没有恶意强制转换的情况下)输入错误的值。
如何做到这一点?
(可能的解决方案是简单地编写几个采用几个不同枚举的函数 - 仍然可能但不是很好,或者像 Is there a name for this pattern? (C# compile-time type-safety with "params" args of different types) 这样的东西 - 看起来都不太好。)
【问题讨论】:
-
虽然在 C# 中无法扩展需要访问内部的 Enum,但可以使用扩展方法实现对 num 的许多扩展。你知道如何创建扩展方法吗?
-
你的意思是我的整数的扩展方法,所以我可以写 2.MyMethod()?如果我理解正确,我不知道这对我有什么帮助。我将如何获得类型安全,甚至是枚举提供的一些排序?
-
不,你的枚举的扩展方法来扩展它们。您说扩展枚举是一条死胡同,但事实并非如此。由于 Enum 没有内部结构,因此扩展方法在这里就足够了。
-
如果您确实需要具有内部结构的枚举,那么它们应该是类/对象而不是枚举,如下面的答案之一所示。
-
你说的是扩展方法?因为我说过 a) 继承和 b) 接口对我来说是一条死胡同。
标签: c# enums type-safety