我在通用列表中非常棒,并且会真正使用一些帮助。 (甚至不知道通用是否适用于我的事业)。
我有:
public class GenericList<T> : IList<T>
{
public DateTime date { get; set; }
public int state { get; set; }
}
我想要的只是创建一个方法,将T
的状态作为参数,并返回其firstIndex
。
我想这很简单,但正如我之前提到的没有经验
答案 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
。