.NET 6 IntersectBy 和 ExceptBy 示例
.NET 6 IntersectBy and ExceptBy examples
有人可以提供一个关于如何使用 .NET 6 LINQ IntersectBy
和 ExceptBy
方法的小示例吗? MSDN 没有任何示例,我试过的那个由于 CS0411 错误而无法编译。我试过的例子:
namespace Test
{
internal struct Example
{
public int X { get; set; }
public int Y { get; set; }
public override string ToString()
{
return $"{X}, {Y}";
}
}
public class Program
{
public static void Main()
{
var elements = new List<Example>
{
new Example { X = 10, Y = 20 },
new Example { X = 11, Y = 23 },
};
var elements2 = new List<Example>
{
new Example { X = 10, Y = 12 },
new Example { X = 44, Y = 20 },
};
//ok
var union = elements.UnionBy(elements2, x => x.X);
//CS0411 - Why ?
var intersect = elements.IntersectBy(elements2, x => x.X);
//CS0411 - Why ?
var except = elements.ExceptBy(elements2, x => x.X);
Console.ReadKey();
}
}
}
虽然 documentation 没有任何示例,它声明 selector 函数应该 select TKey
即第二个集合的类型。以下应该有效:
var intersect = elements.IntersectBy(elements2, x => x);
var except = elements.ExceptBy(elements2, x => x);
虽然我认为这可能更接近你想要的:
var intersect = elements.IntersectBy(elements2.Select(e => e.X), x => x.X);
对于更复杂的类型,您可能需要考虑实现 IEqualityComparer 并使用将一个作为参数的重载。
有人可以提供一个关于如何使用 .NET 6 LINQ IntersectBy
和 ExceptBy
方法的小示例吗? MSDN 没有任何示例,我试过的那个由于 CS0411 错误而无法编译。我试过的例子:
namespace Test
{
internal struct Example
{
public int X { get; set; }
public int Y { get; set; }
public override string ToString()
{
return $"{X}, {Y}";
}
}
public class Program
{
public static void Main()
{
var elements = new List<Example>
{
new Example { X = 10, Y = 20 },
new Example { X = 11, Y = 23 },
};
var elements2 = new List<Example>
{
new Example { X = 10, Y = 12 },
new Example { X = 44, Y = 20 },
};
//ok
var union = elements.UnionBy(elements2, x => x.X);
//CS0411 - Why ?
var intersect = elements.IntersectBy(elements2, x => x.X);
//CS0411 - Why ?
var except = elements.ExceptBy(elements2, x => x.X);
Console.ReadKey();
}
}
}
虽然 documentation 没有任何示例,它声明 selector 函数应该 select TKey
即第二个集合的类型。以下应该有效:
var intersect = elements.IntersectBy(elements2, x => x);
var except = elements.ExceptBy(elements2, x => x);
虽然我认为这可能更接近你想要的:
var intersect = elements.IntersectBy(elements2.Select(e => e.X), x => x.X);
对于更复杂的类型,您可能需要考虑实现 IEqualityComparer 并使用将一个作为参数的重载。