2012-02-06 69 views
0

我有以下代码更简单的方法来减少这种代码

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 

有没有一种方法,我可以写一个函数,并传递参数来减少这种代码

(比方说)

void Helper(string fieldName, somethinghere) 
{ 
    SetField(fieldName,usesomethinghere); 
} 
+0

问题在哪里? – 2012-02-06 05:54:36

+0

'item.FirstName'的类型是什么?我最好猜测是一个'char?[]'这似乎相当荒谬。 – leppie 2012-02-06 05:57:31

回答

1

我们不知道d ATA类型的item性质的,但假设它是T,如果定义(超载):

void SetField(string fieldName, T[] itemProperty) 
{ 
    SetField(fieldName, 
     itemProperty == null || itemProperty[0] == null ? "" : itemProperty[0].Value); 
} 

那么你的50-60线可以简化为:

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

这是你”重新找?

+0

是的确实。也有一种方法,我可以把字段映射到一个二维数组中,所以我可以循环通过它并调用此函数 类似于 'code' array [] [] arr = new [] [] { “文本字段1”,item.FirstName, “文本字段2”,item.LastName } 或者即使实例化 更好{ “文本字段1”, “姓”, “文本字段2”, “姓氏” } 和do foreach(var var in arr) { SetField(arr [0] [0],arr [0] [1]); } 'code' – Jakkamma 2012-02-06 07:45:25

+0

我不知道2D阵列解决方案。我更像是一个Lisp家伙。我也想看看这是如何在C#中完成的。 – 2012-02-06 15:23:24

1

如何在Item类中创建一个新的只读属性?

喜欢的东西:

public String FirstName_for_display { 
    get { 
     if(FirstName == null || FirstName[0] == null) 
      return ""; 
     return FirstName[0].Value; 
    } 
} 

还有,你SetField的东西,如:

SetField("TextField1", item.FirstName_for_display) 
+0

对不起,我还不够清楚。在这段代码中没有问题,但想看看是否有一种方法可以调用带有定义“TextField1”的字符串的函数,并接受另一个属性(这对我来说很难),并调用SetField(str1, ARG2)。 – Jakkamma 2012-02-06 07:43:10

0

尝试类似:

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); 
    } 

} 

虽然没有测试....

相关问题