3
A
答えて
9
:
は、誰もがこのような何かを持っている任意の方法を知っています:ように、後で私のコードで私はそれを参照することができます
public SOMESTRUCTURE SessionKeys : string
{
value1 = "value1key",
value2 = "value2key",
name = "name"
}
やって来る(私はそれをコンパイルしていないので、構文がオフになることがあります。)
public static class SessionKeys
{
public const string Value1 = "Value1";
public const string Value2 = "Value2";
...
}
3
をC#2.0を使用して - 私はJohn Fisherにより示唆されるように最善のオプションは、あなたの値の定数と静的クラスを使用することであると信じています。
あなたがC#3.0を使用することができる場合は、標準のenum、あまり好ましくない方法で変換を処理するための単純な拡張メソッドを使用することができます。
3
はここに私の答えを参照してください:
Getting static field values of a type using reflection
このジョン・フィッシャーの答えとの違いは、関数のパラメータとしてSessionKeysを渡し、あなたが望む列挙のようなセマンティクスを得ることができるということです。
VB.Netには以前の質問がありましたが、C#ポートはそれほど難しいものではありません。実際には、ここでは(未テスト):
public interface ICustomEnum<T>
{
ICustomEnum<T> FromT(T value);
T Value { get; }
// Implement using a sealed class with a private constructor
// that accepts and sets the Value property,
// one shared readonly property for each desired value in the enum,
// and implicit conversions to and from T.
// Then see this link to get intellisense support
// that exactly matches a normal enum:
// https://stackoverflow.com/questions/102084/hidden-features-of-vb-net/102217#102217
// Note that the completion list only works for VB.
}
/// <completionlist cref="SessionKeys"/>
public sealed SessionKeys: ICustomEnum<string>
{
private string _value;
public string Value { get { return _value; } }
private SessionKeys(string value)
{
_value = value;
}
private static SessionKeys _value1 = new MyStringEnum("value1key");
public static SessionKeys value1 { get { return _value1;} }
private static MyStringEnum _value2 = new MyStringEnum("value2key");
public static MyStringEnum value2 { get { return _value2;} }
public static ICustomEnum<string> FromString(string value)
{
// use reflection or a dictionary here if you have a lot of values
switch(value)
{
case "value1key":
return value1;
case "value2key":
return value2;
default:
return null; //or throw an exception
}
}
public ICustomEnum<string> FromT(string value)
{
return FromString(value);
}
public static implicit operator string(SessionKeys item)
{
return item.Value;
}
public static implicit operator SessionKeys(string value)
{
return FromString(value);
}
}
あなたはインターフェイスを本当に必要はありませんが、私はそれがそれらを実装する方法を私に思い出させるために保ちます。
1
実際には、列挙型は単なる静的なクラスではなく、数多くの公開数値定数を持っています。列挙型は型です。定数を使用すると、型の安全性が失われます。クラスの静的メンバをクラスと同じ型にすると、型の安全性を確保できます。
public sealed class SessionKey
{
private _value;
private SessionKey(string value)
{
_value = value;
}
public string Value { get return _value; }
public static readonly SessionKey Value1 = new SessionKey("Value1");
public static readonly SessionKey Value2 = new SessionKey("Value2");
}
public class Something
{
/* stuff */
public void Foo(SessionKey sessionKey)
{
switch(sessionKey.Value)
{
case SessionKey.Value1.Value:
DoBaz();
break;
case SessionKey.Value2.Value:
DoBop();
break;
default:
DoBar();
}
}
/* other stuff */
}
関連する問題
- 1. 数値列にnullとして文字列スペースを格納する方法
- 2. Spring - Enumを文字列として格納/取得しているモンゴル
- 3. Rails 5のenum値として特殊文字を含む文字列を格納します。
- 4. マップのEnumキーと値をマップする方法<enum,enum>を文字列として返します
- 5. 数字をASCII値または文字に変換して文字列配列に格納する方法
- 6. MVCの文字列定数格納先
- 7. NSMutableArrayの値を文字列に格納する方法は?
- 8. context.xmlに文字列値を格納する方法
- 9. kdbに列を文字列として格納する
- 10. firebaseリアルタイムデータベースに文字列として整数を格納
- 11. セッション記憶番号変数を文字列として格納
- 12. MATLABは配列として文字列を格納します
- 13. Qbytearrayをintに変換して文字列値として格納する
- 14. Xpages:文字列をリソースバンドルとしてファイルに格納する方法
- 15. 入力モデルの文字列値を分割し、モデルオブジェクトに別のプロパティとして値を格納する方法
- 16. Pythonの文字列を変数に格納する方法は?
- 17. Webfrontendsに複数の言語の文字列とテキストを格納する方法
- 18. JSONレスポンスを文字列に格納し、その文字列をローカルに格納する方法ios objective c
- 19. C++ - BLOBを文字列として格納する
- 20. Redis文字列の代わりに数値を格納する方法
- 21. javascriptを使用してテキスト入力から文字列として値を格納する方法
- 22. 文字列/配列(Python)に複数の関数値を格納
- 23. VB.NETと同じ方法でPHPで文字列をハッシュする
- 24. MYSQLは、同じ文字列が複数の行に格納されている場合に最適な方法で格納しますか?
- 25. シンボル(変数とシンボルの文字列を格納する)
- 26. 文字列関数 "CharAt" "char"に数値を格納して表示する
- 27. Invoke-Sqlcmdクエリを文字列として格納します。
- 28. Cassandraは文字列としてタイムスタンプを格納します
- 29. コンソールアプリケーションの文字列配列に数字だけを格納する方法
- 30. 整数値を文字配列に格納するC++
私は静的なクラスの使用について考えていました。とても清潔。ちょうどそこに私が気づいていなかったいくつかの他のオプションがあるかもしれないと思った。 – sarsnake
+1このような静的なクラスを常に使用します。ここ – DancesWithBamboo
問題は、昔ながらの文字列パラメータを使用する必要があり、関数にこれらの値のいずれかを渡すために、そのためのコースコンパイラは、その関数の_any_文字列を可能にするということです。 –