.NET 6 LINQIntersectBy
と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();
}
}
}
ベストアンサー1
認められたドキュメンテーション例はありませんが、セレクター関数はTKey
2 番目のコレクションの型を選択する必要があることが示されています。次のコードが機能するはずです。
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 を実装し、それを引数として受け取るオーバーロードを使用することを検討してください。