Лучший способ оценки двух объектов - PullRequest
0 голосов
/ 15 мая 2019

Я изо всех сил пытаюсь найти лучший способ оценки двух объектов, которые могут быть или не быть списком строк.

Я чувствую, что должен быть лучший способ сделать следующее. У кого-нибудь есть совет, который может мне помочь, пожалуйста?

Я получаю объекты из веб-службы, поэтому невозможно заранее узнать, к какому типу они относятся.

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 Ответ

1 голос
/ 15 мая 2019

Если я правильно понял ваш вопрос / код, это решит вашу проблему или поможет?

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;
}

Если это так, я бы, вероятно, реорганизовал бы две половины метода в два отдельных метода - один для обеспеченияу вас есть списки строк, а второй сделать итерацию и сравнить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...