C#在List <t>中定位并返回字符串

时间:2017-05-14 20:10:30

标签: c#

我有一个名为BorrowerList的List<Borrower>。我希望能够从列表中查找并返回字符串值(name)。来自类似问题的解决方案对我不起作用(使用Linq)

public Borrower FindBorrower(string name)
{
     var match = BorrowerList.FirstOrDefault(stringToCheck => stringToCheck.Contains(name));
     // error raised here says: does not contain a definition for 'Contains' and the best extension method overload
     return match;
}

如果有帮助,这就是Borrower

的代码
class Borrower
{
    private string name;
    private Book b;

    public Borrower(string n)
    {
        name = n;
    }

    public string GetName()
    {
        return name;
    }

    public Book GetBook()
    {
        return b;
    }

    public void SetBook(Book b)
    {
        this.b = b;
    }
}

2 个答案:

答案 0 :(得分:4)

错误来自您的Borrower课程,它没有Contains方法。

您似乎无法将适用于List<string>的解决方案转换为List<Borrower>

最简单的解决方法是:

var match = BorrowerList.FirstOrDefault(borrower => borrower.Name.Contains(name));

这假设您向string Name {get;}添加了Borrower属性。如果没有,那么......

var match = BorrowerList.FirstOrDefault(borrower => borrower.GetName().Contains(name));

......应该足够了。

作为解释,签名FirstOrDefaultFunc<T, bool>。在这种情况下,TBorrower,而非string,因此您需要深入了解Borrower的属性/方法以获取名称。

这个问题可能有更好的解决方案。但就目前而言,这应该会让你解决问题。

答案 1 :(得分:1)

如果我猜对了你的意图:

    public Borrower FindBorrower(string name)
    {
        var match = BorrowerList.Where(x => x.nameToCheck.Contains(name)).FirstOrDefault();
        return match;
    }

}

class Borrower
{
    public string nameToCheck { get; set; }
    // the rest of class definitions...
}