Я использую подпрограмму для чтения данных из файлов XML похож на это:Почему мое приведение недействительно?
<VerificationSample X1 = "1" X3 = "3" ../>
используя этот вызов:
XmlReader reader = XmlReader.Create(path);
reader.ReadToFollowing("VerificationSample");
this.X1 = (double)FileStructure.GetAttributeSafe(reader, "X1", typeof(double)); // exists
this.X2 = (double)FileStructure.GetAttributeSafe(reader, "X2", typeof(double)); // doesn't exist
Однако некоторые атрибуты не могут существовать, так что я с этим справиться, используя эту процедуру внутри что функция для чтения атрибутов определение:
public static object GetAttributeSafe(XmlReader reader, string attributeName, Type objectType)
{
// ..
string value = reader.GetAttribute(attributeName);
if (value != null) // attribute exists
{
if (objectType != typeof (string))
{
var converter = TypeDescriptor.GetConverter(objectType);
returnValue = converter.ConvertFrom(value);
}
else // is already a string and doesn't need to be converted
{
return value;
}
}
else // attribute doesn't exist
{
return "0";
}
}
Если атрибут не существует, приложение появляется сообщение об ошибке:
Specified cast is not valid
В чем моя ошибка?
Если атрибут не существует, ваш метод возвращает * 'string' *' "0" '. Это нельзя отнести к 'double'. –
@john, но если читатель читает '' 0 "' из файла, который является строкой. Оно работает. И если я делаю это 'значение =" 0 "; return value; 'также не работает. Зачем? –
Когда вы читаете «0» из файла, вы пытаетесь преобразовать его в запрошенный тип. Вы не выполняете этот путь кода, если запрашиваемый атрибут отсутствует. –