2007年5月19日星期六

我的 Formatter

你如何将 DateTime 对象转换成 String?这是我的答案:

// 那个"?"不是乱码呦!这个相当

// 于写Nullbale<DateTime> birthday...

DateTime? birthday = new DateTime(2007, 1, 1);

DateTime? birthday2 = null;

string s = Formatter.New("d") ¦ birthday; // s = "2007-1-1"

string s2 = Formatter.New("d") ¦ birthday2; // s2 = ""

string s3 = Formatter.New("d", "不详") ¦ birthday2; // s3 = "不详"


怎么样,是不是很酷? 其实 Formatter 的实现相当的简单,下面是全部源代码

public class Formatter

{

  private string _fmt = "";

  private string _nullString = "";

  public Formatter(string fmt, string nullString)

  {

    _fmt = fmt;

    _nullString = nullString;

  }

  public static Formatter New(string fmt)

  {

    return new Formatter(fmt, "");

  }

  public static Formatter New(string fmt, string nullString)

  {

    return new Formatter(fmt, nullString);

  }

  public static string operator ¦(Formatter lhs, Nullable<DateTime> rhs)

  {

    if (rhs.HasValue)

    {

      return rhs.Value.ToString(lhs._fmt);

    }

    else

    {

      return lhs._nullString;

    }

  }

} // class Formatter


其实就是重载了竖线操作符而已。其实我想重载“<<”来着,可惜 .Net 规定“<<”操作符的右操作数必须是 int,真TNND气死我了,杀死比尔。

没有评论: