2012-10-26 43 views
3
private void listHelper (int listSize, ref Object taker, Object giver, Type type) 
    { 
     if (listSize == 0) 
     { 
      taker = null; 
     } 
     else 
     { 
      taker = new List<type>(listSize); 
      giverType tempGiver; 
      for (int i = 0; i < listSize; i++) 
      { 
       type= new type(); 
       tempGiver.value = giver[i]; 
       taker.Add(tempGiver); 
      } 
     } 
    } 

這是我的代碼。我試圖將一個類型參數傳遞給私有方法來聲明泛型類型列表......但我不知道該怎麼做。如何傳遞一個參數來聲明泛型類型列表?

參數接受者是一個列表。在這種情況下,接受者正在存儲一個通用類型的對象。 參數類型是通用類型。

我在網上搜索了一段時間。我仍然不確定如何做到這一點。

+2

我不能按照你在這裏試圖做的。你能寫一個你想要實現的東西的解釋嗎?你想複製一個列表嗎? – nicodemus13

回答

1

您應該創建一個通用方法。泛型在C#中充當模板。該方法在聲明時被綁定。

public void ListHelper<T>//... 

    List<T> my list//... 
10

試着做一個泛型方法來代替:

private void listHelper<T> (int listSize, out List<T> taker, IList<T> giver) 
{ 
    if (listSize == 0) 
    { 
     taker = null; 
    } 
    else 
    { 
     taker = new List<T>(listSize); 
     for (int i = 0; i < listSize; i++) 
     { 
      taker.Add(giver[i]); 
     } 
    } 
} 

此外,我建議使用out而不是ref(因爲我已經做了),因爲你總是在返回前的值賦給taker。這允許調用代碼在調用方法之前不必分配虛擬值。

或者更好的是,你應該只是返回列表

private List<T> listHelper<T> (int listSize, IList<T> giver) 
{ 
    List<T> taker; 
    ... 
    return taker; 
} 

注意,如果你所有的方法做的是複製從givertaker所有元素(即指定listSize實際上只是從編碼下的緩繳的習慣,總是等於在giver元素的數量),您可以替代giver.Count或只是做:

private List<T> listHelper<T> (IList<T> giver) 
{ 
    return giver.Any() ? giver.ToList() : null; 
} 

當然,如果listSize是真的「元素的個數返回,起始於的前面」,你可以這樣做:

private List<T> listHelper<T> (IList<T> giver, int numElements) 
{ 
    return giver.Any() ? giver.Take(numElements).ToList() : null; 
} 

事實上,閱讀到您的問題。此外,它看起來像要實例某種類型的新對象,並設置value屬性的項目中giver。那麼這個怎麼樣(當然我假設了很多關於你的taker對象和你有一個接口ITaker<U>指定字段/屬性public U value):

private List<T<U>> listHelper<T, U> (IList<U> giver) where T : ITaker<U>, new() 
{ 
    return giver.Any() ? giver.Select(g => new T<U>() {value = g}).ToList() : null; 
} 
+2

更好的下降listSize贊成giver.Count –

+0

@HenkHolterman同意,但我想知道是否有別的事情'listSize',我們不知道 –

+0

非常感謝!很有幫助! – user1713153

2

我猜它是這樣的:

private void ListHelper<T>(int listSize, ref object taker, object giver) 
{ 
    ... 
    List<T> list = new List<T>(); 
    ... 
}