私はXMLは次のようなファイルからデータを読み取るためのルーチンを使用していますがなぜ私のキャストが有効でないのですか?</p> <pre><code><VerificationSample X1 = "1" X3 = "3" ../> </code></pre> <p>このコール使用:
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 ''を読んだ場合、できます。そして、私がこれを行うと 'value =" 0 ";戻り値;それはまた動作しません。どうして? –
ファイルから「0」を読み込むと、問題のあるタイプに変換するのに問題が発生します。要求された属性が存在しない場合は、そのコードパスを実行しません。 –