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#是如何做到这一点的。