2014-02-28 10 views
2

일반 목록의 꽤 멍청한데 정말 도움이 될 것입니다. (제네릭이 내 원인을 위해 적절한 사용인지 알지 못합니다.)일반 목록 및 해당 방법

는 내가 가진 :

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

내가 원하는 건 인수로 T의 상태를 취할 것하고 firstIndex을 반환하는 방법을 만드는 것입니다.

나는 그것이 매우 간단하다 생각하지만 난 그렇게도

+1

"T의 상태"란 무엇을 의미합니까? 아이템을 검색하고 싶습니까? – Kenneth

+1

T는 상태가 없으며 T는 모든 유형의 개체입니다. 제네릭 목록에는 상태가 있습니다. – Philippe

+0

'IList'에 대해 배우려고하십니까? 또는 '날짜'와 '상태'를 별도의 클래스 (예 : MyClass)에 넣은 다음 ''목록을 만들 수 있습니까? –

답변

3

와 경험을 언급하지 않기 때문에 나는 이미 일반적인 List<T> 있기 때문에 당신이 모든 클래스 GenericList을 필요로하지 않는다는 것을 생각한다. 어쩌면 당신은 클래스 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

고마워요, excatly 원했던 thats, 그러나 나는 심지어 그것을 정확하게 다루는 방법을 안다. – 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을 구현해야합니다.