c#中的字符串转换为常量类型

本文关键字:常量 类型 转换 字符串 | 更新日期: 2023-09-27 18:06:29

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

这样的函数
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 []);

我如何将其转换为从字符串类型获得常量的值?基本上,它应该返回我为"新错误{0}当"MSG_1"传递?

c#中的字符串转换为常量类型

您可能需要一个返回类型为String的GetNewType

建议:

如果常量不被重用,并且它仅供您查找。

您可以使用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;
    }

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

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

但我必须说,这是一个非常糟糕的方法!你应该重新考虑你的设计

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

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

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

创建一个静态readonly ReadOnlyDictionary属性,用你的'constants'填充:

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"];

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

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

查看如何在c#中使用本地化了解更多细节