1.参数检查

  对于写库的大多数人来说,参数检查是一件极其麻烦的事情,我们需要重复写以下代码:

public void Foo(string name)
{
  if(name == null) throw new ArgumentNullException("name");
}

  现在我们有了扩展方法,则可以这样:

/// <summary>
/// 参数检查扩展方法类
/// </summary>
public static class RequireExtension
{
  public static void RequireNotNull(this object obj, string name)
  {
    if(name == null) throw new ArgumentNullException("name");
    if(obj is null) throw new ArgumentNullException(name);
  }
}
 
// 示例
public void Foo(string name)
{
  name.RequireNotNull("name");
}

 

2.本地化

  当我们使用枚举,经常需要在枚举和本地化字符串之间转换,或者编码规范为英文,需要将枚举转换为中文,扩展方法可以让我们这样。

/// <summary>
/// 本地化后的友好名称
/// </summary>
public class LocalizedNameAttribute : Attribute
{
    public string Name { get;set;}
}
/// <summary>
/// 扩展枚举
/// </summary>
public static class EnumExtension
{
  public static void ToLocalized(this Enum e)
  {
  Type type = member.GetType();
  foreach (FieldInfo field in type.GetFields())
  {
      if (!field.IsDefined(typeof(LocalizedNameAttribute), false))
          continue;
      LocalizedNameAttribute att = (LocalizedNameAttribute)Attribute.
          GetCustomAttribute(field, typeof(LocalizedNameAttribute));
      return att.Name;
  }
  return member.ToString();
  }
}
/// <summary>
/// 性别
/// </summary>
public enum Gender
{
  [LocalizedName(Name = "")]
  Male,
  [LocalizedName(Name = "")]
  Famale,
  [LocalizedName(Name = "东方不败")]
  EastNotFail,
}

  我们就可以 Gender.Famle.ToLocalized() 直接获取本地化后的字符串。

 

3.强类型转换扩展

  利用强类型转换,我们可以在代码中少写很多强制转换和类型检查代码:

  我们经常写出这样又臭又长的代码:

MyAttribute att = (MyAttribute)Attribute.GetCustomAttribute(methodInfo, typeof(MyAttribute));

  现在,我们可以这样:

MyAttribute att = methodInfo.GetAttribute<MyAttribute>();

 

今天先到这里,下次有经验再分享。

posted on 2008-03-15 23:25  Zealic  阅读(458)  评论(1编辑  收藏  举报