2

DateTime オブジェクトを受け取り、文字列を返すビュー ヘルパーを作成しようとしました。DateTime オブジェクトが新しい DateTime(0) と等しい場合、関数は空の文字列を返します。それ以外の場合は、フォーマットされた DateTime 文字列を返します。これはこれまでのところ機能します。

public static string DateTimeOrEmpty(this HtmlHelper htmlHelper, DateTime dateTime)
{
    return dateTime.ToString().Equals(new DateTime(0).ToString()) 
        ? String.Empty 
        : dateTime.ToString("{0:g}");
}

問題は、フォーマット ("{0:g}") をパラメーターとして渡したいということです。

public static string DateTimeOrEmpty(this HtmlHelper htmlHelper, DateTime dateTime, string format)
{
    return dateTime.ToString().Equals(new DateTime(0).ToString()) 
        ? String.Empty 
        : dateTime.ToString(format);
}

しかし、それは正しく動作しません。私の視点からヘルパーを呼び出すと

<%: Html.DateTimeOrEmpty(Model.StopDate, "{0:g}") %>

「format」のパラメーターとして「{0:g}」を使用する関数を実行すると、「{O:n. Chr.}」のような結果が得られますが、これは期待したものではありません

4

1 に答える 1

3

この{0:}部分はパラメータをフォーマットするためstring.Formatのものです。「g」を ToString() に渡したいだけです。

<%: Html.DateTimeOrEmpty(Model.StopDate, "g") %>

しかし、私はあなたをお勧めします

  1. 生の DateTime 値で比較を行います。または、文字列を比較したい場合は、表示文字列を一度だけ作成し、それを再利用します。
  2. 毎回新しい DateTime を作成するのではなく、比較に静的な DateTime.MinValue を使用するか、少なくとも 1 つの静的インスタンスを作成して比較します。

すなわち

public static string DateTimeOrEmpty(this HtmlHelper htmlHelper, DateTime dateTime, string format)
{
    return (dateTime == DateTime.MinValue)
        ? String.Empty 
        : dateTime.ToString(format);
}
于 2010-07-27T09:45:18.717 に答える