我有一个基于字符串的枚举创建为结构:
public struct Version {
public const string
Version1 = "Version1",
Version2 = "Version2";
}
我试着像这样使用它:
public Version curVersion {
get {
if (ConfigurationManager.AppSettings["Version"] == "Version1") {
return Version.Version1;
}
return Version.Version2;
}
}
然而,它在“返回Version.Version1;”上抛出错误话说:
Cannot implicitly convert type 'string' to 'Version'
我如何转换?
我也试过“(版本)返回Version.Version1;”并且它是相同的结果,除了错误删除“隐含”一词。
答案 0 :(得分:0)
如果您想返回字符串,那么curVersion
应该是string
类型,而不是Version
。
答案 1 :(得分:0)
在您的情况下,适当的解决方案是使用常规枚举:
enum Version
{
Version1,
Version2,
}
如果您想获取特定枚举的字符串值,可以使用ToString
:
string s = Version.Version1.ToString();//this will result in the string "Version1"
至于您看到错误的原因,Version.Version1
在您的代码中不是Version
的实例。变量的类型为String
。它在Version
类中定义的事实并不使它成为Version
的实例。您需要创建一个new Version
并返回它以进行编译。
虽然您可以创建自己的基于字符串的枚举类型,但根本不需要。你可以像前面所说的那样使用ToString
。如果你想要这样做,尽管代码看起来像这样:
public struct Version
{
private string value;
private Version(string value)
{
this.value = value;
}
public static readonly Version Version1 = new Version("Version1");
public static readonly Version Version2 = new Version("Version2");
public override string ToString()
{
return value;
}
}
然后,您可以进一步根据基础字符串值添加解析,比较,相等等功能。
使用此自定义“字符串枚举”类型的主要原因是,如果重要的是枚举的字符串值与用于表示它的变量名称不同。如果字符串值不是C#中的合法标识符(即包含空格的内容),或者仅仅因为它很长且标识符应该是它的较短版本,这一点尤为重要。
答案 2 :(得分:0)
你的结构没有任何意义,因为它没有任何实例字段。 Cosider将其更改为static
类,如下所示:
public static class Version {
public const string
Version1 = "Version1",
Version2 = "Version2";
}
然后Version1
和Version2
的类型为string
。也许您的媒体资源curVersion
也应该有string
类型?
如果你真的想要一个结构,你可以将其改为:
public struct Version {
public readonly string Text;
Version(string text) {
Text = text;
}
public static readonly Version Version1 = new Version("Version1");
public static readonly Version Version2 = new Version("Version2");
}