解析C#的扩展方法

2019-12-30 15:04:17于海丽

    2.枚举扩展方法:


 public static class EnumExtensions
 {
  /// <summary>
  /// 获取名字
  /// </summary>
  /// <param name="e"></param>
  /// <returns></returns>
  public static string GetName(this Enum e)
  {
   return Enum.GetName(e.GetType(), e);
  }
  /// <summary>
  /// 获取名字和值
  /// </summary>
  /// <param name="enumType">枚举</param>
  /// <param name="lowerFirstLetter">是否转化为小写</param>
  /// <returns></returns>
  public static Dictionary<string, int> GetNamesAndValues( this Type enumType, bool lowerFirstLetter)
  {
   //由于扩展方法实际是对一个静态方法的调用,所以CLR不会生成代码对调用方法的表达式的值进行null值检查
   ArgumentValidator.ThrowIfNull(enumType, "enumType");
   //获取枚举名称数组
   var names = Enum.GetNames(enumType);
   //获取枚举值数组
   var values = Enum.GetValues(enumType);
   var d = new Dictionary<string, int>(names.Length);
   for (var i = 0; i < names.Length; i++)
   {
    var name = lowerFirstLetter ? names[i].LowerFirstLetter() : names[i];
    d[name] = Convert.ToInt32(values.GetValue(i));
   }
   return d;
  }
  /// <summary>
  /// 转换为小写
  /// </summary>
  /// <param name="s"></param>
  /// <returns></returns>
  public static string LowerFirstLetter(this string s)
  {
   ArgumentValidator.ThrowIfNull(s, "s");
   return char.ToLowerInvariant(s[0]) + s.Substring(1);
  }
 }

    五.总结:

    在本文中,主要对扩展方法进行了一些规则说明、声明方式,使用方式,以及对扩展方法的意义和扩展方法的原理进行了简单的解答。并在本文的最后给了一个枚举的扩展方法代码。

以上就是本文的全部内容,希望对大家有所帮助,同时也希望多多支持ASPKU!


注:相关教程知识阅读请移步到c#教程频道。