Как насчет внешнего метода:
public static class XElementExtensions
{
public static bool AsBoolean(this XElement self, bool defaultValue)
{
if (self == null)
{
return defaultValue;
}
if (!string.IsNullOrEmpty(self.Value))
{
try
{
return XmlConvert.ToBoolean(self.Value);
}
catch
{
return defaultValue;
}
}
return defaultValue;
}
}
Я проверял это с помощью SnippetCompiler:
XElement test = new XElement("test",
new XElement("child1"),
new XElement("child2", new XText("true")),
new XElement("child3", new XText("false")),
new XElement("child4", new XText("rubbish")));
WL(test.Element("child1").AsBoolean(false)); // note, "child1" has no value (or is `""`)
WL(test.Element("child2").AsBoolean(false));
WL(test.Element("child3").AsBoolean(false));
WL(test.Element("child4").AsBoolean(false));
WL(test.Element("child5").AsBoolean(false)); // note, "child5" doesn't exist
Чтобы получить этот результат:
False
True
False
False
False
Добавьте больше таких методов для других типов, а также добавьте AsBoolean(defaultValue)
, так как это может пригодиться, когда вы хотите по умолчанию true
!
Как уже говорили другие, вы можете использовать оператор ??
, чтобы задать значение для null
. Это не гнездится, однако, так:
LaunchDebugger = XmlConvert.ToBoolean(Configuration.Element("LaunchDebugger").Value) ?? false;
будет через NullReferenceException
, если в XML-файле нет такого элемента.