2

次のような関数とともに静的クラスで定義された定数があります

public const string MSG_1 = "New error {0}" 
public const string MSG_2 = "Random error occurred {1}"

public static string Message_ToForm(string MType, string[] vals)

public static GetNewType(string MType)
{
  switch (MType)
    {
      case "MSG_1" :  ...........
    }
}

Message_ToForm("MSG_1", string[]); のようなプログラムから呼び出す必要があります。

文字列型から定数の値を取得するように変換するにはどうすればよいですか? 基本的に、"MSG_1" が渡されたときに "新しいエラー {0}?" として返されるはずです。

4

7 に答える 7

1

MessageType 列挙を作成し、それに基づいて切り替えます。

enum MessageType
{ 
   None = 0,
   Msg1,
   Msg2
}

public static string GetNewType(MessageType MType)
{
    string msg = string.Empty;
    switch (MType)
    {
      case MessageType.Msg1:
         msg = MSG_1;
         break;
      case MessageType.Msg2:
         msg = MSG_2;
         break;
    }
    return msg;
}
于 2013-03-28T07:54:43.043 に答える
1

私はあなたの質問に本当に混乱していますが、それがあなたが探しているものだと思います:

public static string GetNewType(string MType)
{
  switch (MType)
    {
      case "MSG_1": return MSG_1;
      case "MSG_2": return MSG_2;
      default: throw new ArgumentException("MType");
    }
}

しかし、私は言わなければなりません - それは本当に悪いアプローチです! 設計を再考する必要があります

于 2013-03-28T07:49:35.473 に答える
1

メソッドに戻り値の型がありませんでした。私はこれがあなたが望むものだと信じています。

static string GetNewType(string MType)
{
   switch (MType)
      {
         case "MSG_1" :
            return MSG_1;
         case "MSG_2":
            return MSG_2;
      }
   return "";
}

しかし、文字列が定数として変数に保存される理由はありますか? スイッチの文字列を返せませんか?このような:

switch (MType)
{
   case "MSG_1" :
      return "New error {0}";
   case "MSG_2":
      return "Random error occurred {1}";
}
于 2013-03-28T07:56:34.480 に答える
1

GetNewType の String としての戻り値の型が必要になる場合があります

提案:

定数が再利用されず、ルックアップ専用の場合。

Dictionarya を使用してルックアップを行うことができます

     Dictionary<string, string> constValues = new Dictionary<string, string>()
                                                         {
                                                             {"MSG_1", "New error {0}"},
                                                             {"MSG_2", "Random error occurred {1}"}
                                                         };


    public string GetNewType(string MType)
    {
        if (constValues.ContainsKey(MType))
            return constValues[MType];

        return string.Empty;
    }
于 2013-03-28T07:58:51.823 に答える
0

すぐに使用できる .NET ローカリゼーション機能を使用することを強くお勧めします。リソース ファイルをプロジェクトに追加し、すべての文字列メッセージをそこに入れるだけです。リソース ファイルは、文字列リソースのキーと値のペアのようなものです。IDE は、コードで使用できる各文字列メッセージのプロパティを自動的に作成します。

詳細については、C# でローカリゼーションを使用する方法を確認してください。

于 2013-03-28T08:05:03.007 に答える
0

「定数」が入力された静的な読み取り専用の ReadOnlyDictionary プロパティを作成します。

private static readonly System.Collections.ObjectModel.ReadOnlyDictionary<string, string> _msgDictionary =
    new System.Collections.ObjectModel.ReadOnlyDictionary<string, string>(
        new Dictionary<string, string>()
        {
            { "MSG_1", "New error {0}" },
            { "MSG_2", "Random error occurred {1}" }
        });

public static System.Collections.ObjectModel.ReadOnlyDictionary<string, string> Messages
{
    get { return _msgDictionary; }
}

次に使用法:

var msg = Messages["MSG_1"];
于 2013-03-28T08:00:38.817 に答える
0
public static GetNewType(string MType)
{
string MType = yourClass.MSG_1
  switch (MType)
    {
      case yourClass.MSG_1
        break;
          ....
        default:
       // Code you might want to run in case you are
       // given a value that doesn't match.
       break;
    }
}
于 2013-03-28T08:02:48.847 に答える