C# C“错误”;特定强制转换无效。”;即使通过检查objectToCast是否为ExpectedType来验证它是否有效

C# C“错误”;特定强制转换无效。”;即使通过检查objectToCast是否为ExpectedType来验证它是否有效,c#,validation,reflection,casting,type-conversion,C#,Validation,Reflection,Casting,Type Conversion,基本上,以下是我在代码中所做的工作(替换泛型名称) Type fooObjType=fooObj.GetType(); PropertyInfo fooProp=fooObjType.GetProperty(“FooProperty”); 如果(fooProp==null | | |!fooProp.CanRead | | |!fooProp.CanWrite) 返回; var fooVal=fooProp.GetValue(fooObj)// 使用Convert-to构造(尽管我不确定为什么使

基本上,以下是我在代码中所做的工作(替换泛型名称)

Type fooObjType=fooObj.GetType();
PropertyInfo fooProp=fooObjType.GetProperty(“FooProperty”);
如果(fooProp==null | | |!fooProp.CanRead | | |!fooProp.CanWrite)
返回;

var fooVal=fooProp.GetValue(fooObj)// 使用Convert-to构造(尽管我不确定为什么使用entVal而不是fooVal)。
Convert.ToInt64(entVal)

什么是entVal?您试图将longVal强制转换为它,但它没有在任何代码postedsry中定义,在复制粘贴后更改名称时错过了该代码。编辑以更好地反映我的代码。entVal已更正为fooVal。
Type fooObjType = fooObj.GetType();
PropertyInfo fooProp = fooObjType.GetProperty("FooProperty");
if (fooProp == null || !fooProp.CanRead || !fooProp.CanWrite)
    return;

var fooVal = fooProp.GetValue(fooObj); //<-- Also tried using "object" instead of "var" here.
long longVal = 0;
if (fooVal is long || fooVal is int || fooVal is short)
    longVal = (long)fooVal;//<-- Error on this cast.
//More code for checking if fooVal is Nullable and has a value, and assigning it appropriately for those cases.