格式化自动属性的语法

时间:2012-12-13 01:54:10

标签: c# .net

我有一个典型的C#自动属性。当我得到一个get时,如何应用WebUtility.HtmlDecode();设置;

更新:

好的,当天的愚蠢错误。我有一个奇怪的问题,我的web.config数据库连接字符串指向正确的服务器,但出于某种原因,因为我有2个实例(一个sql 2008和2012),它仍然在2008年拿起该数据库的实例编码还在那里。我通过我在2012 DB中创建的单元测试解码了Title来解决了编码问题,在这种情况下,这个整个fing帖子在堆栈中是不必要的,因为最终的问题是它是从旧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 个答案:

答案 0 :(得分:3)

你不能,我想。唯一的方法是使用一个单独的方法来格式化值并将其分配给属性,ex

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);
}

答案 1 :(得分:1)

设置后,属性的值不应更改。它应该返回您设置的相同值。这就是为什么它被称为财产。在设置属性值之前调用HtmlDecode

如果其他人使用您的课程而无法访问您的来源,他们无法想象您在设置属性值时正在进行任何处理。

答案 2 :(得分:0)

你真的不想通过属性进行HTML编码/解码,尽管如果你愿意的话也可以。这有几个问题:

  1. 无论是阅读还是写作,您都会在每次访问属性时对其进行编码/解码。
  2. HTML编码/解码是一种“有损”转换,你只希望每个字符串完成一次;当你在多个属性上扔掉它时,你不想经常编码和解码并重新编码相同的字符串,你就会开始失去信息。
  3. 内容的HTML编码不是您要存储的对象的属性,它是内容本身的属性。
  4. 您真正想要做的是使用代表HTML编码字符串的更强类型。

    .NET 4.0框架包含System.Web.HtmlString类型,您应该将其用于此目的。实际上,如果您希望保持一般性,请使用System.Web.IHtmlString界面。

答案 3 :(得分:-1)

你无法使用魔法吸气剂和二传手自动完成。您需要创建自己的私有属性并将其用作公共属性的后备存储。

示例:

private string _Item;

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

然而,这个问题的其他答案是正确的,这可能是一个坏主意。例如,如果您的代码曾在HTML应用程序之外使用,则必须在设置此属性之前对所有文本进行HTML编码。