通过匿名Ilist类型迭代

时间:2015-03-05 19:00:55

标签: c# casting ilist

考虑这段代码

  public object GetDetailClasses(IList DefaultValue, IList ChangedValue)
    {
        foreach (var DefaultValueItem in DefaultValue)
        {
            foreach (var ChangedValueItem in DefaultValue)
            {
                if (ChangedValueItem.NameofProp == DefaultValueItem.NameofProp)
                { 
                //do stuff...
                }
            }
        }
    }

如何为这个方法迭代这两个Ilist参数,而不将它们转换为相关类并比较它们内部的项目(因为每次它们都是这样的) 包含来自不同类的数据)。有什么方法可以迭代这些参数并获取不对称的属性,或者我可以使用像反射这样的代码。

2 个答案:

答案 0 :(得分:0)

以下是使用反射的解决方案:

foreach (var defaultValueItem in DefaultValue)
{
    foreach (var changedValueItem in DefaultValue)
    {
        var defaultProp = defaultValueItem.GetType().GetProperties().SingleOrDefault(x => x.Name == "NameOfProp");
        var changedProp = changedValueItem.GetType().GetProperties().SingleOrDefault(x => x.Name == "NameOfProp");
        if (defaultProp == null || changedProp == null)
        {
            continue;
        }
        var defaultValue = defaultProp.GetValue(defaultValueItem);
        var changedValue = changedProp.GetValue(changedValueItem);
        if (defaultValue == changedValue)
        { 
            //do stuff...
        }
    }
}

不漂亮,但应该有效。

答案 1 :(得分:0)

我建议您不惜一切代价尝试使用仿制药,但是如果您认为仿制药不适合您,那么反思和反思我会使用动态所以您不必像以前那样投射对象:

public object GetDetailClasses(IList DefaultValue, IList ChangedValue)
{
    foreach (var DefaultValueItem in DefaultValue)
    {
        foreach (var ChangedValueItem in DefaultValue)
        {
            if (ChangedValueItem.AsDynamic().NameofProp == DefaultValueItem.AsDynamic().NameofProp)
            { 
            //do stuff...
            }
        }
    }
}

您需要参考:

https://www.nuget.org/packages/ReflectionMagic/