-4

我有一个基于字符串的枚举创建为结构:

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;
        }
    }

但是,它在“return Version.Version1;”上引发错误 说:

Cannot implicitly convert type 'string' to 'Version'

我该如何转换?

我也试过“(Version)return Version.Version1;” 除了错误删除了“隐式”一词之外,结果相同。

4

3 回答 3

0

如果你想返回字符串,那么curVersion应该是 type string,而不是Version

于 2013-04-03T20:31:45.450 回答
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# 中的合法标识符(即其中包含空格的东西)或者可能只是因为它很长并且标识符应该是它的较短版本,则这一点尤其重要。

于 2013-04-03T20:38:34.890 回答
0

您的结构毫无意义,因为它没有任何实例字段。Cosider 将其更改为一个static类,如下所示:

public static class Version {
    public const string
        Version1 = "Version1",
        Version2 = "Version2";
}

然后Version1Version2类型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");
}
于 2013-04-03T20:39:15.973 回答