在处理异常的过程中获取变量的名称?

时间:2013-08-07 11:27:55

标签: c# visual-studio-2010 .net-4.0 .net-4.5

我有这个功能,我用它来验证

    public void Validate()
    {
        Action<List<Field>> validateFields = (field) =>
            {
                if (field != null && field.Any())
                {
                    field.ForEach(x => x.Validate());
                }
            };

        new List<List<Field>> { this.PersonElements, this.ContactElements, this.MiscElements }.ForEach(x =>
            {
                try
                {
                    validateFields(x);
                }
                catch (Exception e)
                {
                    Log.ErrorFormat("An exception has occurred while validation of {1} : {0}", e, x.ToString()); // print something as x.Name.ToString());
                    throw;
                }
            });
    }

问题在于这一行:

  new List<List<Field>> { this.PersonElements, this.ContactElements, this.MiscElements }.ForEach(x =>

我需要(如果发生异常)将某些内容记录为

尝试处理&#34; PersonElements / ContactElements / MiscElements&#34;时出现异常。取决于在哪个验证期间发生了异常。

如果在处理过程中发生异常,如何获取列表变量名称?

提前致谢。

1 个答案:

答案 0 :(得分:0)

变量名仅在其上下文中有意义。可以使用不同的变量访问相同的对象。因此,以类似Tuple<String, List<Field>>的类型提供集合的名称是合理的。

new List<Tuple<List<Field>>> { Tuple.Create("PersonElements", this.PersonElements), ... }.ForEach ( 
    ...
    validateFields(x.Item2);
    ...
    Log.ErrorFormat("An exception has occurred while validation of {1} : {0}", e, x.Item1);