通用列表和相应的方法

时间:2014-02-28 12:02:14

标签: c# list generics

我在通用列表中非常棒,并且会真正使用一些帮助。 (甚至不知道通用是否适用于我的事业)。

我有:

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

我想要的只是创建一个方法,将T的状态作为参数,并返回其firstIndex

我想这很简单,但正如我之前提到的没有经验

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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 :(得分: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