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

我真的对你的问题感到困惑,但认为这就是你要找的:

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

我将创建一个 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

您的方法缺少返回类型。我相信这就是你想要的。

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

建议:

如果常量没有被重用,并且它仅用于您的查找。

您可以使用 aDictionary进行查找

     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

创建一个静态只读 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 回答
0

我强烈建议使用开箱即用的 .NET 本地化功能。您只需将资源文件添加到项目中并将所有字符串消息放入其中,资源文件就像字符串资源的键值对,IDE 会自动为每个字符串消息创建一个属性,您可以在代码中使用该属性。

查看如何在 C# 中使用本地化以获取更多详细信息。

于 2013-03-28T08:05:03.007 回答