Как насчет использования метода расширения для инкапсуляции пропущенных случаев атрибута:
public static class XmlExtensions
{
public static T AttributeValueOrDefault<T>(this XElement element, string attributeName, T defaultValue)
{
var attribute = element.Attribute(attributeName);
if (attribute != null && attribute.Value != null)
{
return (T)Convert.ChangeType(attribute.Value, typeof(T));
}
return defaultValue;
}
}
Обратите внимание, что это будет работать, только если T
- это тип, в который строка преобразуется через IConvertible. Если вы хотите поддерживать более общие случаи преобразования, вам, возможно, придется поискать TypeConverter. Это вызовет исключение, если тип не преобразуется. Если вы хотите, чтобы эти случаи также возвращали значение по умолчанию, вам потребуется выполнить дополнительную обработку ошибок.