C# 减少此代码的更简单方法

C# 减少此代码的更简单方法,c#,function,C#,Function,我有以下代码 SetField("TextField1", ( item.FirstName == null || item.FirstName[0] == null) ? "" : item.FirstName[0].Value); SetField("TextField2", ( item.MiddleName == null || item.MiddleName[0] == null) ? "" : i

我有以下代码

SetField("TextField1", ( item.FirstName == null || item.FirstName[0] == null)
                      ? ""  : item.FirstName[0].Value);
SetField("TextField2", ( item.MiddleName == null || item.MiddleName[0] == null)
                     ? "" : item.MiddleName[0].Value);
SetField("TextField3", ( item.LastName == null || item.LastName[0] == null)
                     ? "" : item.LastName[0].Value);
................
like this 50-60 lines  
有没有一种方法可以编写函数并传入参数来减少代码

(比如说)


在Item类中创建一个新的只读属性怎么样

比如:

public String FirstName_for_display {
    get {
        if(FirstName == null || FirstName[0] == null)
            return "";
        return FirstName[0].Value;
    }
}
SetField("TextField1", item.FirstName_for_display)
Private void fieldsSetter(string[] fieldnames, object[] items)
{

    for(int s=0; s<fieldnames.Count(); s++)
    {
        SetField(fieldnames[s], (((item)items).FirstName == null || ((item)items).FirstName[0] == null) ? ""  : ((item)items).FirstName[0].Value);
    }

}
并用如下方式调用设置域:

public String FirstName_for_display {
    get {
        if(FirstName == null || FirstName[0] == null)
            return "";
        return FirstName[0].Value;
    }
}
SetField("TextField1", item.FirstName_for_display)
Private void fieldsSetter(string[] fieldnames, object[] items)
{

    for(int s=0; s<fieldnames.Count(); s++)
    {
        SetField(fieldnames[s], (((item)items).FirstName == null || ((item)items).FirstName[0] == null) ? ""  : ((item)items).FirstName[0].Value);
    }

}
尝试以下方法:

public String FirstName_for_display {
    get {
        if(FirstName == null || FirstName[0] == null)
            return "";
        return FirstName[0].Value;
    }
}
SetField("TextField1", item.FirstName_for_display)
Private void fieldsSetter(string[] fieldnames, object[] items)
{

    for(int s=0; s<fieldnames.Count(); s++)
    {
        SetField(fieldnames[s], (((item)items).FirstName == null || ((item)items).FirstName[0] == null) ? ""  : ((item)items).FirstName[0].Value);
    }

}
Private void字段设置(字符串[]字段名,对象[]项)
{

对于(int s=0;s我们不知道
属性的数据类型,但假设它是
t
,如果您定义(重载):

然后,您的50-60行可以减少到:

SetField("TextField1", item.FirstName);
SetField("TextField2", item.MiddleName);
SetField("TextField3", item.LastName);
...

这就是您要找的吗?

项的类型。FirstName
?我最好的猜测是一个
char?[]
,这似乎很荒谬。很抱歉,我不够清楚。这段代码中没有问题,但想知道是否有一种方法可以使用定义“TextField1”并接受另一个属性的字符串调用函数(这对我来说是困难的部分)并调用SetField(str1,arg2)。是的,没错。还有一种方法可以将字段映射放入二维数组中,这样我就可以循环遍历它并调用这个函数,比如
code
array[][]arr=new[][[]{“TextField1”,item.FirstName,“TextField2”,item.LastName}甚至更好,如果实例化为{“TextField1”、“FirstName”、“TextField2”、“LastName”}和do-foreach(arr中的var-something){SetField(arr[0][0],arr[0][1];}
code
我不知道2D数组解决方案。我更喜欢Lisp语言。我也想看看C#是如何做到这一点的。