小编Sim*_*aus的帖子

字符串转义为XML-Attribute

我看了一下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)

c# xml stringbuilder xmlwriter escaping

9
推荐指数
1
解决办法
1万
查看次数

c#:查找错误:if(false)

我刚刚在我的程序中发现了一个错误(经过一些调试和撕裂我的头发)

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

c# debugging visual-studio-2010

8
推荐指数
2
解决办法
427
查看次数

匹配正则偏移的正则表达式

我想检查某个模式(例如双引号字符串)是否匹配精确位置.

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)

.net c# regex

7
推荐指数
1
解决办法
3354
查看次数

c#填充除GraphicsPath之外的所有内容

我有一些看起来像这样的代码:

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)

这会产生如下情况:

### |
  ##|
 ## |

我怎样才能填写路径的确切补码?

期望的输出:

   #|
##  |
#  #|

c# graphics path

4
推荐指数
1
解决办法
1624
查看次数