2017-05-14 6 views
0

私はList<Borrower>というBorrowerListを持っています。リストから文字列値(0​​)を見つけて返したいと思っています。同様の質問から解決策は私のために動作しません(LINQのを使用しています)C#リスト内の文字列を見つけて返します<t>

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クラスから来て、それは持っていません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; 
    } 
} 
+0

はそれを試みたが、うまくいきませんでした。 stringToCheckが現在のコンテキストに存在しないと言っています – Kevin

+0

私は、私が提供したコードのブラインドコピー/ペーストと思われます。私は貼り付けられるコード全体を提供していませんでした。 –

答えて

4

するためのコードで助け場合方法はContainsです。

List<string>の場合はList<Borrower>になるソリューションをうまく転置していないようです。

最も簡単な修正は次のとおりです。これはあなたがBorrowerstring Name {get;}プロパティを追加すると仮定し

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

。そうでない場合は、

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

...で十分です。説明のところで


、署名FirstOrDefaultFunc<T, bool>あります。この場合TstringではなくBorrowerであるため、名前を取得するにはプロパティ/メソッドBorrowerをドリルする必要があります。

おそらく、この問題のより良い解決策があります。しかし、当分の間、これはあなたの問題を過ぎてしまうはずです。私は右のそれだったあなたの意図を推測した場合

+0

説明のためにありがとう – Kevin

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... 
} 
+1

これは、条件述語を取る 'FirstOrDefault'のためのオーバーロードを利用することができます。 –

関連する問題