评估两个对象的更好方法

时间:2019-05-15 12:18:42

标签: c# list

我正在努力寻找一种更好的方法来评估两个可能不是字符串列表的对象。

我认为必须有更好的方法来进行以下操作。有人能给我一些建议吗?

我正在从Web服务获取对象,因此无法事先知道它们是什么类型的对象。

private bool EvaluateDataLists(object dataLeft, object dataRight)
{
    bool isDataLeftList = dataLeft is List<string>;
    bool isDataRightList = dataRight is List<string>;

    if (isDataLeftList && !isDataRightList)
    {
        foreach (var entry in dataLeft as List<string>)
        {
            if (Expression.Evaluate(entry, dataRight.ToString(), valueOperator))
                return true;
        }
    }
    else if (!isDataLeftList && isDataRightList)
    {
        foreach (var entry in dataRight as List<string>)
        {
            if (Expression.Evaluate(dataLeft.ToString(), entry, valueOperator))
                return true;
        }
    }
    else if (isDataLeftList && isDataRightList)
    {
        foreach (var leftEntry in dataLeft as List<string>)
        {
            foreach (var rightEntry in dataRight as List<string>)
            {
                if (Expression.Evaluate(leftEntry, rightEntry, valueOperator))
                    return true;
            }
        }
    }

    return false;
}

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题/代码,这是否可以解决您的问题或帮助?

private bool EvaluateDataLists(object dataLeft, object dataRight)
{
    List<string> left = (dataLeft is List<string>) ? dataLeft as List<string> : new List<string> { dataLeft.ToString() };
    List<string> right = (dataRight is List<string>) ? dataRight as List<string> : new List<string> { dataRight.ToString() };

    foreach (string item in left)
    {
        if (right.Where(r => Expression.Evaluate(item, r, valueOperator)).Count > 0)
        {
            return true;
        }
    }
    return false;
}

如果是这样,我可能会将方法的两半重构为两个单独的方法-一个确保您拥有字符串列表,另一个确保迭代和比较