-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の型にする必要があります。stringVersion

于 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を のインスタンスにしませんVersionnew 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

インスタンスフィールドがないため、構造体はまったく無意味です。static次のように、それをクラスに変更します。

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

次にVersion1Version2type を持ち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 に答える