0

在进行代码分析时,我遇到了 Klocwork 问题,

对函数“GetUnderlyingType”的调用返回的引用“GetUnderlyingType”可能为空

if (Nullable.GetUnderlyingType(objProperty.PropertyType) != null)
                {
                    value = row[columnname].ToString().Replace("$", "").Replace(",", "");
                    objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(Nullable.GetUnderlyingType(objProperty.PropertyType).ToString())), null);
                }
                else
                {
                    value = row[columnname].ToString().Replace("%", "");
                    objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null);
                }

在此处输入图像描述

4

1 回答 1

1

从文档

返回值
类型:System.Type

nullableType 参数的类型实参,如果 nullableType 参数是封闭的泛型可为空类型;否则为空

您使用外部if子句处理此问题,但 VisualStudio 似乎无法识别它。解决方案是这样的:

var ut = Nullable.GetUnderlyingType(objProperty.PropertyType);
if (ut != null)
{
    value = row[columnname].ToString().Replace("$", "").Replace(",", "");
    objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(ut.ToString())), null);
}
else
{
    value = row[columnname].ToString().Replace("%", "");
    objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null);
}
于 2017-02-02T11:15:19.673 回答