我有以下功能
public static class ListUtils
{
public static bool ListsHaveCommonality<T>(List<T> listOne, List<T> listTwo, Func<T, string> selectorOne, Func<T, string> selectorTwo)
{
return listOne.Select(selectorOne).Intersect(listTwo.Select(selectorTwo)).Any();
}
}
然后检查它是否有效
//Arrange
List<Alias> aliases = new List<Alias>();
Alias a1 = new Alias { alias = "test@test.com" };
Alias a2 = new Alias { alias = "test2@test.com" };
Alias a3 = new Alias { alias = "test3@test.com" };
aliases.Add(a1);
aliases.Add(a2);
aliases.Add(a3);
List<string> chosenAliases = new List<string>
{
"test@test.com",
"test@something.com",
};
//Act
bool hasCommonality = ListUtils.ListsHaveCommonality(aliases, chosenAliases, (Alias a) => a.alias, (string s) => s);
//Assert
Assert.IsTrue(hasCommonality);
我收到以下错误
Method.Func,System.Func方法的类型参数&#39;无法从使用中推断出来。尝试显式指定类型参数。
答案 0 :(得分:1)
ListsHaveCommonality
假设两个列表都具有相同的类型参数T
。如果要将其与具有不同项类型的列表一起使用,则需要创建一个支持两个类型参数的方法,如下所示:
public static class ListUtils
{
public static bool ListsHaveCommonality<T1,T2>(
List<T1> listOne,
List<T2> listTwo,
Func<T1, string> selectorOne,
Func<T2, string> selectorTwo)
{
return listOne.Select(selectorOne).Intersect(listTwo.Select(selectorTwo)).Any();
}
}
答案 1 :(得分:0)
listOne和listTwo都定义为List<T>
,但是对于您发送List<Alias>
的第一个,您要发送List<string>
的第二个。