通过异常反射获取可为空的对象名称

时间:2016-04-01 08:38:43

标签: c# exception reflection

我们有很多映射器类,并且不鼓励重构(比如使用.HasValue检查)。简而言之,如下所示:

public static MyDto MyEntityToMyDto(MyEntity entity)
    {
        MyDto dto = new MyDto ();
        try
        {
            dto.DtoAge = entity.Age.Value;
            dto.DtoBirthDate = entity.Birthdate.Value;
            dto.DtoNumber = entity.Number.Value;
        }
        catch (InvalidOperationException ex)
        {
            //Throw CustomException with message including the property name which is null like "Age field is null"
        }

        return dto;
    }

似乎异常Stacktrace知道它发生了哪一行。

InvalidOperationException是否有关于通过反射获取信息的字段的任何信息?可以获得这些信息吗?

或者可以用ExceptionResource resource来实现吗?如果是这样的话?

提前致谢。

1 个答案:

答案 0 :(得分:2)

除非引发异常的代码使用这种信息注释异常,否则没有大量成本就无法使用它(想想挑选调试信息以找到对应于堆栈跟踪线的IL然后重新组装这个弄清楚所涉及的领域的名称。)

在这种情况下,Nullable<T>抛出异常并且它没有关于它所存储的字段的任何信息,因此它不可能获得那种信息。

简而言之,不,它无法实现。