【发布时间】:2018-07-12 08:45:29
【问题描述】:
首先让我试着解释一下我的情况。
由于我们无法将字符串值添加到枚举中,并且 我没有添加自定义参数类来存储和读取它(出于性能原因,因为如果我使用类似的东西会涉及反射:public class StringValueAttribute : Attribute),所以我决定使用以下类型的类:
public class Permissions
{
public const string X1 = "X1";
public const string X2 = "X2";
public const string X3 = "X3";
....
public const string X43 = "CAN_HAVE A LONG NAME AND NOT FOLLOWING A PATTERN";
}
现在我想创建一个接收字符串作为参数的方法。但是,我想强制程序员只使用class Permissions 中的strings。
如果我使用枚举,这不会有问题,因为方法参数类型是明确定义的。
当我们使用泛型时,我们可以实现这种类型的约束。 有什么我不知道的“轻/快”可以让我在我的情况下这样做吗?
【问题讨论】:
-
如果字符串看起来总是与 const 名称相同,为什么 不 使用枚举?当您需要字符串时,一个简单的 enum.ToString() 就可以了……您的“自定义参数类”会是什么样子,为什么会影响性能?
-
@RenéVogt:听起来 OP 可能正在实现一个接口或类似的接口,将它们限制在参数类型上。有更多信息会很好......
-
“出于性能原因,我没有添加自定义参数类来存储和读取它” - 我根本不明白这一点。如果您能在此处提供更多上下文,这将非常有帮助。
-
您现在已经提到“反射是不涉及的”,但没有给我们关于如何参与的上下文。我添加了一个针对您当前选择的方法的答案,但如果没有更多上下文,我们无法建议可能更好的替代方法。
-
如果您的程序确实 any 工作,那么“出于性能原因”不使用反射可能不是合理的推理。您可能希望实际测试您的理论并分析您拒绝的解决方案。与您的程序实际执行的操作 相比,反射的开销很小。
标签: c#