我看了一下XML转义的字符串,发现它非常有用.
我想做类似的事情:转义要在XML-Attribute中使用的字符串.
该字符串可能包含\ r \n.XmlWriter类产生类似\ r \n - >
我目前使用的解决方案包括XmlWriter和StringBuilder,而且非常难看.
任何提示?
编辑1:
抱歉让LarsH失望,买我的第一个方法是
public static string XmlEscapeAttribute(string unescaped)
{
XmlDocument doc = new XmlDocument();
XmlAttribute attr= doc.CreateAttribute("attr");
attr.InnerText = unescaped;
return attr.InnerXml;
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的.XmlEscapeAttribute("Foo\r\nBar")
会导致"Foo\r\nBar"
我使用.NET Reflector来了解XmlTextWriter如何转义属性.它使用内部的XmlTextEncoder类...
我的方法我目前正在使用这样的方法:
public static string XmlEscapeAttribute(string unescaped)
{
if (String.IsNullOrEmpty(unescaped)) return unescaped;
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb, settings);
writer.WriteStartElement("a");
writer.WriteAttributeString("a", unescaped);
writer.WriteEndElement();
writer.Flush();
sb.Length -= "\" />".Length;
sb.Remove(0, …
Run Code Online (Sandbox Code Playgroud) 我刚刚在我的程序中发现了一个错误(经过一些调试和撕裂我的头发)
bool first = true;
foreach (RdAbstractNode node in listNodes)
{
if (!first)
{
// do stuff (does not change first)
}
// do more stuff (does not change first)
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到first
的那样永远true
- 永远不会改变.所以if(!first)
基本上是if(false)
.
尽管编译器设置为级别4(最高级别),但编译器未生成警告.
我怎样才能找到类似的if(false)
错误?
我正在使用VS 2010,.Net 4.0编译器,项目设置.Net 2.0
我想检查某个模式(例如双引号字符串)是否匹配精确位置.
例
string text = "aaabbb";
Regex regex = new Regex("b+");
// Now match regex at exactly char 3 (offset) of text
Run Code Online (Sandbox Code Playgroud)
我想检查是否regex
匹配完全是char 3.
我看了一下,Regex.Match Method (String, Int32)
但它的行为与我的预期不符.
所以我做了一些测试和一些解决方法:
public void RegexTest2()
{
Match m;
string text = "aaabbb";
int offset = 3;
m = new Regex("^a+").Match(text, 0); // lets do a sanity check first
Assert.AreEqual(true, m.Success);
Assert.AreEqual("aaa", m.Value); // works as expected
m = new Regex("^b+").Match(text, offset);
Assert.AreEqual(false, m.Success); // this is quite strange...
m …
Run Code Online (Sandbox Code Playgroud) 我有一些看起来像这样的代码:
GraphicsPath p = new GraphicsPath();
// Add some elements to p ...
// ...
g.FillPath(bgBrush, p);
// where g : Graphics and bgBrush : Brush
Run Code Online (Sandbox Code Playgroud)
这会产生如下情况:
### | ##| ## |
我怎样才能填写路径的确切补码?
期望的输出:
#| ## | # #|