C# 设置自动属性格式的语法
我有一个典型的C#自动属性。当我只有一个get时,如何应用WebUtility.HtmlDecode();设置 更新: 好吧,今天最愚蠢的错误。我遇到了一个奇怪的问题,我的web.config数据库连接字符串指向了正确的服务器,但由于某种原因,因为我有两个实例(一个sql 2008和2012),它仍在拾取2008年仍有编码的数据库实例。我已经通过在2012数据库中创建的单元测试对标题进行解码解决了编码问题,在这种情况下,整个fing帖子在堆栈中是不必要的,因为最终的问题是它是从旧数据库读取的(把我搞砸了) 无论如何,我已经解决了这个问题,终于摆脱了2008年的副本,现在它在我的修复后阅读得很好:C# 设置自动属性格式的语法,c#,.net,C#,.net,我有一个典型的C#自动属性。当我只有一个get时,如何应用WebUtility.HtmlDecode();设置 更新: 好吧,今天最愚蠢的错误。我遇到了一个奇怪的问题,我的web.config数据库连接字符串指向了正确的服务器,但由于某种原因,因为我有两个实例(一个sql 2008和2012),它仍在拾取2008年仍有编码的数据库实例。我已经通过在2012数据库中创建的单元测试对标题进行解码解决了编码问题,在这种情况下,整个fing帖子在堆栈中是不必要的,因为最终的问题是它是从旧数据库读取的(把
[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编码/解码,尽管如果您愿意,您可以这样做。这有几个问题:
.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,只是因为它读取的是数据库的一个旧副本,其中编码仍然存在。哑的但是好消息,给你答案。