我有一个List<>
类型world
,并且每个世界元素中都有List<>
类型item
,其本身包含Rectangle
和{ {1}}
继承世界的结构
string
和项目
`class world
public Items[] items { get; set; }
public world(int nooflevels, int noofitems)
{
//when creating a world make the items
items = new Items[noofitems];
for (int i = 0; i < noofitems; i++)
{
items[i] = new Items();
}
}
}`
这个世界列表是这样创建的
class Items
{
public new Rectangle spriterect;
public string type { get; set; }
public Items()
{
spriterect.X = 0;
spriterect.Y = 0;
spriterect.Width = 0;
spriterect.Height = 0;
type = "default";
}
}
我试图根据类型
从项目列表中获取特定的矩形List<world> Worlds = new List<world>();
所以我希望这会选择包含.type thetype的项目[] .spriterect 我希望它返回该项目中的矩形,但它返回一个IEnumerable 如何根据类型返回单个矩形?
答案 0 :(得分:4)
您应该从项目中选择单个项目。如果应该有指定类型的单个矩形,则使用SingleOrDefault
:
var item = Worlds[world].items.SingleOrDefault(i => i.type == thetype);
if (item != null)
a = item.spriterect;
如果您完全确定指定类型的矩形始终存在,那么只需使用Single
:
Rectangle a = Worlds[world].items.Single(i => i.type == thetype).spriterect;
答案 1 :(得分:2)
您希望在.Select
之后使用.Single
。
如果没有一个匹配,Single将抛出异常。
Rectangle a = Worlds[world]
.items.Where(f=> f.type == thetype)
Select(g => g.spriterect).Single();
答案 2 :(得分:2)
而不是使用FirstOrDefault。如果找不到该项,则返回null。
var primary = Worlds[world].FirstOrDefault(f=> f.type == thetype);
if (primary != null)
return primary.spriterect;
return null;
答案 3 :(得分:1)
如果您只知道自己只获得一个值,则可以使用Single
或SingleOrDefault
,如果您知道该项目可能不存在。
//use if you know the rectangle will be there, and there will be only 1 that matches the criteria
Rectangle a = Worlds[world].items.Single(f => f.type == thetype).spriterect;
//use if the rectangle may not be there, and if it is there will be only 1 that matches the criteria
var item = Worlds[world].items.SingleOrDefault(f => f.type == thetype);
if (item != null)
Rectangle a = item.spriterect;
答案 4 :(得分:1)
Where
函数返回一个集合(符合条件的eveything),而不仅仅是一个项目。您可能希望使用First
或Single
,并注意Single
如果有多个匹配条件,则会抛出异常(如果没有,则两者都会抛出)。< / p>