这可能是一个令人难以置信的愚蠢问题但是:我有一个接受字符串的函数,我想确保字符串是特定类的常量。基本上我正在寻找的效果是枚举:
enum MyEnum {...}
void doStuff(MyEnum constValue) {...}
除了字符串:
static class MyFakeStringEnum {
public const string Value1 = "value1";
public const string Value2 = "value2";
}
// Ideally:
void doStuff(MyFakeStringEnum constValue) {...}
// Reality:
void doStuff(string constValue) {...}
我知道这可以通过做一些像
这样的事情来实现public static class MyFakeStringEnum {
public struct StringEnumValue {
public string Value { get; private set; }
public StringEnumValue(string v) { Value = v; }
}
public static readonly StringEnumValue Value1 = new StringEnumValue("value1");
public static readonly StringEnumValue Value2 = new StringEnumValue("value2");
}
void doStuff(MyFakeStringEnum.StringEnumValue constValue) {...}
但是制作一个只存储一个值的对象感觉有些过分。
如果没有额外的代码层和开销,这是否可行?
编辑:虽然枚举确实可以用于字符串,但我想避免使用它有几个原因:
字符串值可能并不总是枚举的1:1转换。如果我有一个空格,不同的大小写,不同的字符集/语言等等,我必须在我想要使用它的每个函数中转换枚举。它可能不会有很多开销或性能损失,但仍然应该避免 - 特别是当它意味着我总是在变异应该是不变的。
即使我使用单独的字符串数组映射来解决上述函数,我仍然需要访问翻译而不是直接使用枚举。地图也意味着有两个相同数据的来源。
我对不同数据类型的这个概念感兴趣,例如。不能通过枚举名称轻易表示或存储为枚举值的浮点数,uluan等。
至于字符串 - >对我来说,首先使用枚举的意义在于我可以依靠智能感知给我一个存在的常数;我不想等到编译时或运行时才能找到答案。传入一个实际的字符串将是鸭子打字,这是我绝对不想用强类型语言做的事情。
答案 0 :(得分:0)
我建议你创建一个枚举并将字符串值解析为枚举成员。 您可以使用Enum.Parse方法执行此操作。如果提供的值不是有效成员,则抛出ArgumentException。
export default (props) => {
const store = configStore(props);
return (
<Provider store={store}>
<Editor props={{ ...props }} />
</Provider>
)
}