将文字映射到对象属性/值

时间:2010-05-20 10:09:33

标签: c#

例如,我的输入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。很多。

1 个答案:

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