字符串到c#中的常量类型

时间:2013-03-28 07:46:37

标签: c# constants

我们在静态类中定义了常量以及

之类的函数
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}”

7 个答案:

答案 0 :(得分: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");
    }
}

但我必须说 - 这是非常糟糕的做法! 您应该重新考虑您的设计

答案 1 :(得分: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;
}

答案 2 :(得分: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}";
}

答案 3 :(得分:1)

您可能需要将返回类型作为GetNewType

的String

建议:

如果常量不被重用,那么它只能用于你的查找。

您可以使用Dictionary进行查找

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

答案 4 :(得分: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"];

答案 5 :(得分: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;
    }
}

答案 6 :(得分:0)

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

查看此How to use localization in C#了解详情。