さまざまなFuncデリゲートのオーバーロードがある関数で匿名メソッドを使用すると、VisualStudio2010で奇妙な動作に遭遇しました。
以下に小さな複製クラスを作成しました。
このListViewAdapterクラスを検討してください
namespace LambdaTestApp
{
public class ListViewAdapter<T>
{
private Func<int, string, int, string> _converter1;
private Func<RefType1, string, string> _converter2;
public ListViewAdapter(int arg1, Func<int, string, int, string> converter)
{
_converter1 = converter;
}
public ListViewAdapter(int arg1, Func<RefType1, string, string> converter)
{
_converter2 = converter;
}
public static ListViewAdapter<T> MockPopulate(int arg, Func<int, string, int, string> converter) {
ListViewAdapter<T> instance = new ListViewAdapter<T>(arg, converter);
return instance;
}
public static ListViewAdapter<T> MockPopulate(int arg, Func<RefType1, string, string> converter)
{
ListViewAdapter<T> instance = new ListViewAdapter<T>(arg, converter);
return instance;
}
}
public class RefType1
{
public string Property1 { get; set; }
}
}
そして、ラムダでオーバーロードを使用する次のコード:
namespace LambdaTestApp
{
class Program
{
static void Main(string[] args)
{
ListViewAdapter<RefType1>.MockPopulate(1, (item, str) =>
{
var myItem = item;
return str;
});
}
}
}
解決する必要がFunc<RefType1, string, string>
あり、最初の引数はである必要がありますが、問題は、 Visual StudioRefType1
である代わりに、それを。と見なすということです。item
RefType1
int
質問:Funcデリゲート間には明らかではない有効な変換がありますか、それともこれはVisual Studio IntelliSenseのバグですか?