2014-02-28 48 views
2

sI在泛型列表中很漂亮,真的會使用一些幫助。 (甚至不知道泛型是否適合我的原因)。通用列表和相應的方法

我:

public class GenericList<T> : IList<T> 
    {   
     public DateTime date { get; set; } 
     public int state { get; set; }    
    } 

所有我想要的是創建一個將作爲參數的T的狀態並返回其firstIndex的方法。

我想這是很簡單,但正如我所說,有這麼過

+1

你是指「T的狀態」是什麼意思?你的意思是你想搜索一個項目? – Kenneth

+1

T沒有狀態,T是任何類型的對象。你的genericList雖然有一個狀態。 – Philippe

+0

你想了解'IList'嗎?或者你可以把'date'和'state'放在一個單獨的類(即MyClass)中,然後創建一個'List '? –

回答

3

沒有經驗,我認爲你不需要你GenericList類,因爲在所有已經有一個通用的List<T>。也許你想創建一個類State

public class State 
{ 
    public DateTime date { get; set; } 
    public int state { get; set; }  
} 

所以,你要找到第一個給定的狀態的指標,可以使用List.FindIndex

var allStates = new List<State>(); 
// fill ... 
int index = allStates.FindIndex(s => s.state == givenState); 

如果沒有名單(但一個數組或另一種IEnumerable<State>)你仍然可以得到指數隨LINQ:

int index = allStates.Select((s, index) => new { s, index }) 
    .Where(x => x.s.state == givenState) 
    .Select(x => x.index) 
    .DefaultIfEmpty(-1) 
    .First(); 
+0

謝謝,那是多麼希望,但我甚至不知道如何正確解決它 – apomene

2

如果你要搜索的列表中,你不需要創建索引一個特定的子類IList<T>,你可以使用內置的方法。這裏有一個例子:

public class SomeClass 
{ 
    public int State {get; set;} 
    public DateTime Date{get; set;} 
} 

public void somemethod() 
{ 
    var list = new List<SomeClass>(); 
    list.Add(new SomeClass{State = 5}); 

    // Get all the items with state 5 
    var itemsWithStateFive = list.Where(item => item.State == 5); 

    // Find the first index of an item that has state 5 
    var indexOfStateFive = list.FindIndex(item => item.State == 5); 
} 
2

據我所知,你想在你的課堂中使用一些T屬性/方法。爲此,您可以將接口要求設置爲T.

interface IMyInterface{ 
    int GetState(); 
} 

public class GenericList<T> : List<T> where T: IMyInterface 
{   
    public DateTime date { get; set; } 
    public int GetState(int i){return this[i].GetState(); } 
} 

像這樣。但是您的列表中的元素將不得不執行IMyInterface