csharp 【C#】LINQの鲜明を自作クラスで使うために,IEquatableインタフェースを実装する。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 【C#】LINQの鲜明を自作クラスで使うために,IEquatableインタフェースを実装する。相关的知识,希望对你有一定的参考价值。
class Program
{
static void Main(string[] args)
{
// シンプルなDistinct
var numbers = new[] { 1, 3, 4, 5, 6, 7, 8, 2, 3, 4, 5, 6, 7 };
Console.WriteLine(string.Join(",", numbers.Distinct().Select(it => it.ToString()).ToArray())); // 1,3,4,5,6,7,8,2
// 自作のクラスでDistinctする場合、IEquatable<T>インタフェースを実装する必要がある。
// 今回は、IDとNameでDistinctされるようにIEquatable<T>インタフェースを実装する。
var cus = new List<Customer>(new[] {
new Customer(1, "endo", "dev1"),
new Customer(2, "endo", "dev2"),
new Customer(1, "endo", "dev3"),
new Customer(4, "endo", "dev4"),
new Customer(5, "endo", "dev5"),
});
var cusDis = cus.Distinct();
Console.WriteLine(string.Join(", ", cusDis.Select(it => it.ToString() + "\r\n").ToArray()));
}
}
// IEquatable<T>を継承する
class Customer : IEquatable<Customer>
{
public int ID { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public Customer(int id, string name) : this(id, name, string.Empty) { }
public Customer(int id, string name, string category)
{
this.ID = id;
this.Name = name;
this.Category = category;
}
public override string ToString()
{
return "IDは:" + this.ID.ToString() + " 名前は:" + this.Name + " 部署は:" + this.Category;
}
// http://msdn.microsoft.com/ja-jp/library/ms131187(v=vs.110).aspx
// Object.Equals(Object)をオーバーライドする場合、オーバーライドされた実装はこのクラス内の静的なEquals(System.Object, System.Object)メソッドの呼び出しでも使用されるらしい。
// 通常、ここは実装しなくても目的の動作はする。
public override bool Equals(object obj)
{
// objがnullか、型が違う時は、等価でない
if (obj == null || this.GetType() != obj.GetType()) {
return false;
}
// IDとNameで比較する。
Customer src = (Customer)obj;
return (this.ID == src.ID && this.Name == src.Name);
}
// GetHashCodeをオーバーライドして実装する。
public override int GetHashCode()
{
// IDとNameのXORを返す。
return this.ID.GetHashCode() ^ this.Name.GetHashCode();
}
#region IEquatable<Customer> メンバ
// IEquatable<T>.Equalsを実装する。
bool IEquatable<Customer>.Equals(Customer other)
{
if (other == null) {
return false;
}
// IDとNameで比較する。
return (this.ID == other.ID && this.Name == other.Name);
}
#endregion
}
以上是关于csharp 【C#】LINQの鲜明を自作クラスで使うために,IEquatableインタフェースを実装する。的主要内容,如果未能解决你的问题,请参考以下文章
csharp log4net的を各クラスで毎回GetLoggerするか,上下文内の记录器をGetLoggerして使いまわすかでコストの差を见てみた。
csharp コルーチンを一括管理するマネージャークラスをつくろうとしたけど,IEnumratorのAPIが少なくて,断念したソース
csharp DataGridView中で,独自のクラスをバインドする方法。记述したコーディングと,あとはDataGirdViewのバインドしたい列のDataPropertyNameプロパティに,独自
swift 斯威夫特のクラス
java 例外について独自クラスの作成
java java的の実行可能クラスの雏形.CLIからの呼び出し用。