| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- namespace ShwasherSys
- {
- public class PropertyComparer<T> : IEqualityComparer<T>
- {
- private PropertyInfo _PropertyInfo;
- /// <summary>
- /// 通过propertyName 获取PropertyInfo对象 /// </summary>
- /// <param name="propertyName"></param>
- public PropertyComparer(string propertyName)
- {
- _PropertyInfo = typeof(T).GetProperty(propertyName,
- BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Public);
- if (_PropertyInfo == null)
- {
- throw new ArgumentException($"{propertyName} is not a property of type {typeof(T)}.");
- }
- }
- #region IEqualityComparer<T> Members
- public bool Equals(T x, T y)
- {
- object xValue = _PropertyInfo.GetValue(x, null);
- object yValue = _PropertyInfo.GetValue(y, null);
- if (xValue == null)
- return yValue == null;
- return xValue.Equals(yValue);
- }
- public int GetHashCode(T obj)
- {
- object propertyValue = _PropertyInfo.GetValue(obj, null);
- if (propertyValue == null)
- return 0;
- else
- return propertyValue.GetHashCode();
- }
- #endregion
- }
- }
|