2016-08-12 14 views
-1

なぜC#コンパイラは文字列にContainsメソッドがないと言いますか?なぜC#コンパイラは文字列に `Contains`メソッドがないと言います

  • errorsオブジェクトがList<Error>
  • Error.Messageはこの文のstring

である

Assert.True(errors.Any(e => e.Message.Contains("hash value", 
    StringComparison.OrdinalIgnoreCase))); 

コンパイラは言う:

「string」が「含む」の定義が含まれていないと最高の拡張メソッドのオーバーロードSystem.Linq.Queryable.Contains<TSource>(System.Linq.IQueryable<TSource>, TSource, System.Collections.Generic.IEqualityComparer<TSource>)は、いくつかの無効な引数

を持っており、この文のために、コンパイラは幸せです:

Assert.True(errors.Any(e => e.Message.IndexOf("hash value", 
    StringComparison.OrdinalIgnoreCase) >= 0)); 
+0

['System.String.Contains()'](https://msdn.microsoft.com/en-us/library/dy85x1sa(v = vs.110).aspx)メソッドは1つしかありません。 2つのパラメータがあります。あなたは何が起こると思いましたか? –

+2

'String.Contains'メソッドの署名は' public bool Contains(string value) 'です。 – Enigmativity

+0

おそらく質問は「コンパイラが 'Contains'の定義を含んでいないと言うでしょうか –

答えて

4

されていますどのC#コンパイラが混乱しているのですか?Containsを使用するのですか?

です。

正しい方法はIndexOf()で、Contains()ではありません。一つだけstring.Contains()過負荷(あなたがそのそれを呼び出すことができる場合)、およびit doesn't take a StringComparison parameterがあります。

+0

私はContainsもサポートされているStringComparisonだと思っていますが、これは拡張メソッドであったに違いありません。このコード。私の質問への回答で代わりにスナークの市民返信いただきありがとうございます。 –

+0

FWIWで、コンパイルエラーがすべてで「入って」私はそれが文字列で持っていないと述べたので、間違った道を見下ろしていました。 –

関連する問題