在所有类 List<Object> 中搜索匹配值

我有两个对象,一个引用另一个。我希望能够使用类似于Player.Inventory.Contain(Item.Attributes == "Sharp"). 我的目标是能够扫描所有物品属性的玩家库存,并检查是否有一个或多个或没有匹配。通过这种方式,我可以根据角色库存动态改变发生的事情。


class Player

{

    public string Name { get; set; }

    public List<Item> Inventory { get; set; }


    public Player()

    {

        Inventory = new List<Item>();

    }

}

和:


public class Item

{

    public int ID { get; set; }

    public string Name { get; set; }

    public bool IsCarried { get; set; }

    public List<string> Attributes { get; set; }


    public Item(int id, string name)

    {

        ID = id;

        Name = name;

        Attributes = new List<string>();

    }

    public Item(int id, string name, bool iscarried)

    {

        ID = id;

        Name = name;

        IsCarried = iscarried;

        Attributes = new List<string>();

    }

}


红颜莎娜
浏览 330回答 2
2回答

qq_花开花谢_0

合适的 LINQ 运算符是.Any().&nbsp;IEplayer.Inventory.Any(item&nbsp;=>&nbsp;item.Attributes.Contains("Sharp"))请注意,如果属性数量变大,则性能会很差。您应该更喜欢HashSet<string>而不是List<string>for&nbsp;Attributes,或者Dictionary<string,int>如果相同的属性可以出现多次。

一只甜甜圈

看起来您可以为此使用带有 lambda 函数的 LINQ 查询。这是一个您可以在您的 Player 类中实现的函数,用于在您的项目中查询具有特定属性名称的项目。只读解决方案 IEnumerable<Item>public IEnumerable<Item> FindMatchingItems(string attributeName) {&nbsp; &nbsp; return this.Items.Where(x => x.Name == attributeName).AsEnumerable();}列出解决方案 List<Item>public List<Item> FindMatchingItems(string attributeName) {&nbsp; &nbsp; return this.Items.Where(x => x.Name == attributeName).ToList();}
打开App,查看更多内容
随时随地看视频慕课网APP