例如,我的输入XML看起来像这样。
<root>
<myelemt>
<input type="variable">
<variable>STARTDATE</variable>
<variable>CUSTOMERNAME</variable>
</input>
</myelemt>
</root>
将其反序列化并加载到对象MyXmlElemtObj
中在我的代码中我写的是这样的,
if(MyXmlElemtObj.input.variable.ToUpper() == "STARTDATE")
ProcessObjectB(ObjectA.OrderDate);
if(MyXmlElemtObj.input.variable.ToUpper() == "CUSTOMERNAME")
ProcessObjectB(ObjectC.UserName);
这里我将这些输入文字映射到某些对象值。
令我害怕的一件事就是在我的代码中看到一些**硬编码文字。
相反,我想写一些像ProcessObjectB(Common.GetMappedvalue(MyXmlElemtObj.input.variable));
有没有办法将这个映射事物隔离到普通类,我将预定义 哪个文字映射到哪些值。问题是值是在运行时创建的对象。
如果我的问题有意义那么我该如何实现呢?
我想我已经提供了所有必要的细节。如有任何遗漏,请告知metnion。很多。
答案 0 :(得分:0)
这个问题措辞有些令人困惑,但从我收集的内容来看,你只是在寻找一个中间类来执行输入变量到字符串的映射。你提到你不希望有硬编码的字符串文字;这里的逻辑补救措施是为它们声明一系列常量(可能在中间映射类的顶部?)。
public class Common
{
public const string STARTDATE = "STARTDATE";
public const string CUSTOMERNAME = "CUSTOMERNAME";
public static string GetMappedValue(string inputVariable)
{
string mappedTo = null;
switch(inputVariable)
{
case "abc":
mappedTo = SOME_OTHER_CONSTANT_HERE; //map it
break;
case "xyz":
mappedTo = FOO;
break;
//etc etc...
}
return mappedTo;
}