76 lines
2.7 KiB
C#
76 lines
2.7 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
|
|
namespace APT.Infrastructure.Core
|
|
{
|
|
/// <summary>
|
|
/// 类型<see cref="Enum"/>扩展方法类
|
|
/// </summary>
|
|
public static class EnumExtensions
|
|
{
|
|
/// <summary>
|
|
/// 获取枚举值<see cref="DescriptionAttribute"/>值
|
|
/// </summary>
|
|
/// <param name="enumeration">枚举值</param>
|
|
/// <returns></returns>
|
|
public static String GetDescription(this Enum enumeration)
|
|
{
|
|
if (enumeration == null)
|
|
return String.Empty;
|
|
|
|
var enumType = enumeration.GetType();
|
|
var fi = enumType.GetField(Enum.GetName(enumType, enumeration));
|
|
var descAttr = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));
|
|
return descAttr == null || String.IsNullOrEmpty(descAttr.Description) ? enumeration.ToString() : descAttr.Description;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 用于指示转换是否成功的返回值。
|
|
/// </summary>
|
|
/// <typeparam name="TEnum">要将 value 转换为的枚举类型。</typeparam>
|
|
/// <param name="value"> 要转换的枚举名称或基础值的字符串表示形式。</param>
|
|
/// <param name="defaultValue">默认值</param>
|
|
/// <returns>如果 value 参数成功转换,则返回类型为 TEnum 的一个对象,其值由 value 表示;否则为 defaultValue。</returns>
|
|
public static TEnum ToEnum<TEnum>(this String value, TEnum defaultValue) where TEnum : struct
|
|
{
|
|
if (String.IsNullOrEmpty(value))
|
|
return defaultValue;
|
|
TEnum result;
|
|
bool parseResult = Enum.TryParse<TEnum>(value, out result);
|
|
return parseResult ? result : defaultValue;
|
|
}
|
|
|
|
|
|
}
|
|
public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
|
|
{
|
|
private Func<T, V> keySelector;
|
|
|
|
public CommonEqualityComparer(Func<T, V> keySelector)
|
|
{
|
|
this.keySelector = keySelector;
|
|
}
|
|
|
|
public bool Equals(T x, T y)
|
|
{
|
|
return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));
|
|
}
|
|
|
|
public int GetHashCode(T obj)
|
|
{
|
|
return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));
|
|
}
|
|
}
|
|
|
|
public static class DistinctExtensions
|
|
{
|
|
public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
|
|
{
|
|
return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
|
|
}
|
|
}
|
|
}
|