1

典型的な C# 自動プロパティがあります。get; しか取得していないときに WebUtility.HtmlDecode() を適用するにはどうすればよいですか。設定;?

アップデート:

わかりました、その日の愚かな間違い。web.config db接続文字列が正しいサーバーを指しているという奇妙な問題がありましたが、2つのインスタンス(SQL 2008と2012の1つ)があったため、何らかの理由で、2008年にそのDBのインスタンスを取得していました。エンコーディングはまだあります。2012 DB で作成した単体テストを介してタイトルをデコードするだけでエンコーディングの問題を修正しました。 .

とにかく、私はすでにこれを修正しており、最終的に2008年のコピーを取り除き、修正後に問題なく読み取れるようになりました:

  [Test]
    public void CleanAllPostEntries_DecodeHTML_DecodeWasSuccessful()
    {
        // Arrange

        // Act
        IEnumerable<Entry> posts = PostCRUD.GetAllPosts();

        foreach (Entry post in posts)
        {
            post.Title = WebUtility.HtmlDecode(post.Title);
            post.Body = WebUtility.HtmlDecode(post.Body);
            post.MetaTitle = WebUtility.HtmlDecode(post.MetaTitle);

            PostCRUD.UpdatePost(post);

            //System.Diagnostics.Debug.WriteLine("id: " + post.Id);
            //System.Diagnostics.Debug.WriteLine("title: " + WebUtility.HtmlDecode(post.Title));
            //System.Diagnostics.Debug.WriteLine("body: " + WebUtility.HtmlDecode(post.Body));
        }

        //Assert
        // TODO: add asserts
    }    

だから私は結局デコードが必要だとは思わない..私はすでにそれをやった!

4

4 に答える 4

3

できないと思います。唯一の方法は、値をフォーマットしてプロパティに割り当てる別のメソッドを用意することです。

private string SamplePropery {get; set;}
private string FormatMethod(string value) {}

private void SampleExecute()
{
    // format and set to property
    SampleProperty = FormatMethod("hello world");

    // get property and format the value
    string _value = FormatMethod(SampleProperty);
}
于 2012-12-13T01:58:43.370 に答える
1

プロパティの値は、一度設定すると変更できません。設定した値と同じ値を返すはずです。それがプロパティと呼ばれる理由です。HtmlDecodeプロパティ値を設定する前に呼び出します。

他の人があなたのクラスで作業していて、ソースにアクセスできない場合、プロパティ値を設定するときにあなたが何らかの処理を行っているとは思わないでしょう。

于 2012-12-13T02:32:37.047 に答える
0

必要に応じて可能ですが、プロパティを介してHTMLのエンコード/デコードを実行することは実際には望ましくありません。これにはいくつかの問題があります。

  1. 読み取りまたは書き込みにかかわらず、プロパティへのすべてのアクセスでそのエンコード/デコードのヒットが発生します。
  2. HTMLのエンコード/デコードは「不可逆」変換であり、文字列ごとに1回だけ実行する必要があります。複数のプロパティで文字列を投げるときに、同じ文字列を常にエンコード、デコード、および再エンコードしたくない場合は、その方法で情報が失われ始めます。
  3. コンテンツのHTMLエンコーディングは、コンテンツを保存しているオブジェクトのプロパティではなく、コンテンツ自体のプロパティです。

本当にやりたいのは、HTMLでエンコードされた文字列を表すより強力な型を使用することです。

.NET 4.0フレームワークには、System.Web.HtmlStringこの目的で使用する必要のあるタイプが含まれています。実際、System.Web.IHtmlString一般的な状態を維持したい場合は、インターフェイスを使用してください。

于 2012-12-13T02:36:41.043 に答える
-1

魔法のゲッターとセッターで自動的に行うことはできません。独自のプライベート プロパティを作成し、それをパブリック プロパティのバッキング ストアとして使用する必要があります。

例:

private string _Item;

public string Item
{
    get
    {
        return _Item;
    }
    set
    {
        _Item = WebUtility.HtmlDecode(value);
    }
}

ただし、この質問に対する他の回答は正しいため、これはおそらく悪い考えです。たとえば、コードが HTML アプリケーションの外部で使用される場合、このプロパティを設定する前にすべてのテキストを HTML エンコードする必要があります。

于 2012-12-13T02:28:06.497 に答える