Visual Basic からEnumerable.Count()拡張メソッドを使用しようとすると、次のコードでコンパイル エラーが発生します。
Imports System.Linq
Module Module1
Sub Main()
Dim l As New List(Of Foo) From {New Foo("a"), New Foo("b"), New Foo("a")}
Dim i As Integer = l.Count(Function(foo) foo.Bar = "a")
Console.WriteLine(i)
Console.ReadLine()
End Sub
Class Foo
Sub New(ByVal bar As String)
Me.Bar = bar
End Sub
Public Property Bar As String
End Class
End Module
生成されるエラーは次のとおりです。
'Public ReadOnly Property Count As Integer' にはパラメーターがなく、その戻り値の型にインデックスを付けることができません。
私は .NET 4.0 をターゲットにしているので、拡張メソッドをサポートする必要があります。C# の同等のコードが拡張メソッドを正しく推論することも注目に値します...
引数として渡した述語を指定すると、コンパイラが Enumerable.Count の使用を推測できないのはなぜですか? また、List の Count プロパティの代わりに拡張メソッドを使用するにはどうすればよいですか?