2012-02-06 97 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); 
    } 

} 

雖然沒有測試....

相關問題