Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置自动属性格式的语法_C#_.net - Fatal编程技术网

C# 设置自动属性格式的语法

C# 设置自动属性格式的语法,c#,.net,C#,.net,我有一个典型的C#自动属性。当我只有一个get时,如何应用WebUtility.HtmlDecode();设置 更新: 好吧,今天最愚蠢的错误。我遇到了一个奇怪的问题,我的web.config数据库连接字符串指向了正确的服务器,但由于某种原因,因为我有两个实例(一个sql 2008和2012),它仍在拾取2008年仍有编码的数据库实例。我已经通过在2012数据库中创建的单元测试对标题进行解码解决了编码问题,在这种情况下,整个fing帖子在堆栈中是不必要的,因为最终的问题是它是从旧数据库读取的(把

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

更新:

好吧,今天最愚蠢的错误。我遇到了一个奇怪的问题,我的web.config数据库连接字符串指向了正确的服务器,但由于某种原因,因为我有两个实例(一个sql 2008和2012),它仍在拾取2008年仍有编码的数据库实例。我已经通过在2012数据库中创建的单元测试对标题进行解码解决了编码问题,在这种情况下,整个fing帖子在堆栈中是不必要的,因为最终的问题是它是从旧数据库读取的(把我搞砸了)

无论如何,我已经解决了这个问题,终于摆脱了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
    }    
[测试]
public void CleanAllPostEntries\u DecodeHTML\u DecodeWasSuccessful()
{
//安排
//表演
IEnumerable posts=PostCRUD.GetAllPosts();
foreach(职位中的入职职位)
{
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(“标题:+WebUtility.HtmlDecode(post.title));
//System.Diagnostics.Debug.WriteLine(“body:+WebUtility.HtmlDecode(post.body));
}
//断言
//TODO:添加资产
}    
所以我不认为我需要解码…我已经做了

我想你不能。唯一的方法是使用单独的方法格式化值并将其指定给属性,例如

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

你不能用神奇的接球手和二传手自动完成。您需要创建自己的私有财产,并将其用作公共财产的后备存储

例如:

private string _Item;

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

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

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


如果其他人使用您的类而无法访问您的源代码,他们不会想象您在设置属性值时正在进行任何类型的处理。

您确实不想通过属性进行HTML编码/解码,尽管如果您愿意,您可以这样做。这有几个问题:

  • 您将在每次访问该属性(无论是读还是写)时接受编码/解码
  • HTML编码/解码是一种“有损”转换,每个字符串只需执行一次;当您在多个属性上反复使用同一字符串时,您不希望不断地对其进行编码、解码和重新编码,这样会开始丢失信息
  • 内容的HTML编码不是存储内容的对象的属性,而是内容本身的属性
  • 您真正想要做的是使用表示HTML编码字符串的更强类型


    .NET4.0框架包括一个
    System.Web.HtmlString
    类型,您应该使用该类型。事实上,如果您希望保持通用性,请使用
    System.Web.IHtmlString
    界面。

    旁注:我认为通常不应该做一些事情,使刚设置为不匹配值的属性设置为
    item.Prop=value;如果(item.Prop!=value){WHY???}
    。(+1到Kuya John表示接近)。属性的值在设置后不应更改。这就是你的方法,出于好奇。htmlencoded文本来自哪里?来自DB,是的,我可能应该在最低级别进行解码。我现在只是想破解这个,只是为了我的博客,我会稍后修复它。糟糕的编码技术。“看看我的答案。”杰伦,但至少我回答了这个问题。你说“不要这样做”,我承认这可能是最好的做法,但不是问题的答案。@MosheKatz胡说八道。“不要这样做”是一个完全可以接受的答案,回答了如何做坏事的问题。我甚至告诉他应该怎么做。在设置属性之前调用函数。如何实现这一点由他自己决定,并取决于他的代码的其余部分。使用/实现更强的类型,如
    HtmlString
    来表示编码,要比精神上跟踪传递给多个函数的
    string
    的编码状态好得多。我刚刚意识到它是从我的本地数据库。所以我根本不需要解码,因为我已经通过一个单元测试解决了这个问题,我创建了一个单元测试来对它进行WebUtiilty.HtmlDecode,并且已经在数据库中更新了这些值。所以我在不需要的时候添加了Decode,只是因为它读取的是数据库的一个旧副本,其中编码仍然存在。哑的但是好消息,给你答案。