我们在静态类中定义了常量以及
之类的函数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}”
答案 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#了解详情。