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"传递?
您可能需要一个返回类型为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#中使用本地化了解更多细节