将Enums与位字段一起使用时:
enum ReallyBigEnum { FirstChoice = 0x01, AnotherOption = 0x02 }
ReallyBigEnum flag = ReallyBigEnum.FirstChoice | ReallyBigEnum.AnotherOption;
Run Code Online (Sandbox Code Playgroud)
用于测试位的代码是:
if( (flag & ReallyBigEnum.AnotherOption) == ReallyBigEnum.AnotherOption ) { ... }
Run Code Online (Sandbox Code Playgroud)
由于需要重复被测试的位,这看起来很冗长且容易出错.
如果有某种方式可以说:
if( flag.IsSet( ReallyBigEnum.AnotherOption ) ) { ... }
Run Code Online (Sandbox Code Playgroud)
但是Enums不支持实例方法.所以,我尝试了一个模板功能:
class Enums
{
public static bool IsSet<T>( T flag, T bit ) { return (flag & bit) == bit; }
}
Run Code Online (Sandbox Code Playgroud)
但是测试位的代码看起来像这样:
if( Enums.IsSet<ReallyBigEnum>( flag, ReallyBigEnum.AnotherOption ) ) { ... }
Run Code Online (Sandbox Code Playgroud)
写的很多.然后我试着缩短它:
class Enums
{
public static bool IsSet( int flag, …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用 XmlDocument 生成 XML。一些数据包含换行符和回车符。
当像这样将文本分配给 XmlElement 时:
e.InnerText = "Hello\nThere";
Run Code Online (Sandbox Code Playgroud)
生成的 XML 如下所示:
<e>Hello
There</e>
Run Code Online (Sandbox Code Playgroud)
XML 的接收者(我无法控制)将换行符视为空白,并将上述文本视为:
"Hello There"
Run Code Online (Sandbox Code Playgroud)
为了让接收者保留换行符,它需要编码为:
<e>Hello
There</e>
Run Code Online (Sandbox Code Playgroud)
如果数据应用于 XmlAttribute,则换行符将被正确编码。
我尝试使用 InnerText 和 InnerXml 将文本应用于 XmlElement,但两者的输出相同。
有没有办法让 XmlElement 文本节点以其编码形式输出换行符和回车符?
下面是一些示例代码来演示这个问题:
string s = "return[\r] newline[\n] special[&<>\"']";
XmlDocument d = new XmlDocument();
d.AppendChild( d.CreateXmlDeclaration( "1.0", null, null ) );
XmlElement r = d.CreateElement( "root" );
d.AppendChild( r );
XmlElement e = d.CreateElement( "normal" );
r.AppendChild( e );
XmlAttribute a = d.CreateAttribute( "attribute" );
e.Attributes.Append( a );
a.Value = …Run Code Online (Sandbox Code Playgroud)