所以我有这个模型设置
public class ListOfThings
{
public int Id {get;set;}
public List<int> DefaultRanks {get;set;}
static public IEnumerable<ListOfThings> ListOfDefault{
get {
listOfDefault = new List<ListOfDefault>();
listOfDefault.Add(N1);
listOfDefault.Add(N2);
listOfDefault.Add(N3);
return listOfDefault.AsReadOnly();
}
}
static public ListOfThings N1{ get { return new ListOfThings { Id = 1, Addend = new List<int> { 1 }}; } }
static public ListOfThings N2{ get { return new ListOfThings { Id = 2, Addend = new List<int> { 1,2 }}; } }
static public ListOfThings N3{ get { return new ListOfThings { Id = 3, Addend = new List<int> { 1,2,3 }}; } }
static private ListOfThings n1;
static private ListOfThings n2;
static private ListOfThings n3;
static private List<ListOfThings> listOfDefault;
}
每当我尝试查询静态Ienumerable时,它都会给我一个空值。
var test = ListOfThings.ListOfDefault.Where(a => a.Id == 2);
如果我尝试这样做,它会给我一个警告。
ListOfThings test = ListOfThings.ListOfDefault.Where(a => a.Id == 2);
任何建议都表示赞赏..
谢谢! -G
答案 0 :(得分:2)
你不清楚你的意思是“它会给我一个空值” - 我会对你给出的代码提出异议。 (一个简短但完整的程序来证明这个问题确实会有所帮助。)
第二行肯定会导致编译时失败,理由是Where
返回IEnumerable<ListOfThings>
,而不是单 ListOfThings
。你可能想要这样的东西:
ListOfThings test = ListOfThings.ListOfDefault.SingleOrDefault(a => a.Id == 2);
请注意,您从未在您提供的代码中初始化或使用n1
,n2
或n3
。我还建议使用迭代器块使ListOfDefault属性更简单:
static public IEnumerable<ListOfThings> ListOfDefault {
get {
yield return N1;
yield return N2;
yield return N3;
}
}
答案 1 :(得分:1)
您的代码中存在一些问题。我所做的改变是:
// in a getter
listOfDefault = new List<ListOfDefault>();
// should be:
listOfDefault = new List<ListOfThings>();
// static getters
static public ListOfThings N1{ get { return new ListOfThings { Id = 1, Addend = new List<int> { 1 }}; } }
static public ListOfThings N2{ get { return new ListOfThings { Id = 2, Addend = new List<int> { 1,2 }}; } }
static public ListOfThings N3{ get { return new ListOfThings { Id = 3, Addend = new List<int> { 1,2,3 }}; } }
// should be:
static public ListOfThings N1 { get { return new ListOfThings { Id = 1, DefaultRanks = new List<int> { 1 } }; } }
static public ListOfThings N2 { get { return new ListOfThings { Id = 2, DefaultRanks = new List<int> { 1, 2 } }; } }
static public ListOfThings N3 { get { return new ListOfThings { Id = 3, DefaultRanks = new List<int> { 1, 2, 3 } }; } }
最重要的是你不要在你的LINQ上调用FirstOrDefault()(如果你想让更多的对象使用ToList()):
var test = ListOfThings.ListOfDefault.Where(a => a.Id == 2).FirstOrDefault();
这种方式应该可行。
答案 2 :(得分:1)
我尝试重新创建问题,几乎没有问题。我已粘贴下面的代码
public class ListOfThings
{
public int Id { get; set; }
public List<int> DefaultRanks { get; set; }
static public IEnumerable<ListOfThings> ListOfDefault
{
get
{
listOfDefault = new List<ListOfThings>();
listOfDefault.Add(N1);
listOfDefault.Add(N2);
listOfDefault.Add(N3);
return listOfDefault.AsReadOnly();
}
}
static public ListOfThings N1 { get { return new ListOfThings { Id = 1, DefaultRanks = new List<int> { 1 } }; } }
static public ListOfThings N2 { get { return new ListOfThings { Id = 2, DefaultRanks = new List<int> { 1, 2 } }; } }
static public ListOfThings N3 { get { return new ListOfThings { Id = 3, DefaultRanks = new List<int> { 1, 2, 3 } }; } }
static private ListOfThings n1;
static private ListOfThings n2;
static private ListOfThings n3;
static private List<ListOfThings> listOfDefault;
}
class Program
{
static void Main(string[] args)
{
var test = ListOfThings.ListOfDefault.Where(a => a.Id == 2);
IEnumerable<ListOfThings> ds = ListOfThings.ListOfDefault.Where(a => a.Id == 2);
}
}
ListOfThings test = ListOfThings.ListOfDefault.Where(a => a.Id == 2);
返回Ienumerable而不是单个objectif,你想要单个或第一个对象做类似
ListOfThings ds = ListOfThings.ListOfDefault.Where(a => a.Id == 2).FirstOrDefault();