Получить значение или вернуть ноль - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть метод, который ищет значение в HTML-документе, если элемент найден ((«настройки»)), то значение возвращается. Но если элемент не найден ((«настройки»)), то цикл завершается. Я хочу, если элемент не найден, тогда для CurrentProfileDLS установлено значение null

private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS)
{
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
        }
    }
    return CurrentProfileDLS;
}

Я пробовал, но переменная CurrentProfileDLS не установлена ​​в нуль:

private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS)
{
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
            return CurrentProfileDLS;
        }
    }
    return null;
}

Как это исправить?

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Вы передаете значение, которое нужно установить (или обнулить), но не используете модификатор Out для параметра. Не зная точно, почему вы передаете CurrentProfileDLS, я бы предложил умеренную модификацию

private string CopyProfileDLS_Intercept_AddPhone_Unify()
{
    string CurrentProfileDLS = null;
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
        }
    }
    return CurrentProfileDLS;
}

Таким образом, вы инициализируете поле как нулевое и возвращаете его в конце, независимо от того, переопределено ли оно с помощью elm.GetAttribute("value");.

0 голосов
/ 06 сентября 2018

CurrentProfileDLS, кажется, даже не нужен. Почему бы просто не вернуться напрямую по результатам?

private string CopyProfileDLS_Intercept_AddPhone_Unify()
{
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    var elm = elmC.FirstOrDefault(e => e.Id == "DLSProf" && e.InnerText.Contains("Settings"));

    return elm?.GetAttribute("value");
}

Ваш оригинальный пост позволяет циклу продолжить поиск соответствия, делая поведение похожим на 'последний в выигрыше', поэтому, если это все еще необходимо, вы можете изменить эту строку просто на:

var elm = elmC.LastOrDefault(e => e.Id == "DLSProf" && e.InnerText.Contains("Settings"));
0 голосов
/ 06 сентября 2018

Вам просто нужно изначально установить CurrentProfileDLS на ноль.

private string CopyProfileDLS_Intercept_AddPhone_Unify(string CurrentProfileDLS)
{
    CurrentProfileDLS = null;
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
            break;
        }
    }
    return CurrentProfileDLS;
}

Я не понимаю назначение параметра CurrentProfileDLS. Я предлагаю вам удалить его, если у него нет другой цели, кроме сохранения значения из CurrentProfileDLS = elm.GetAttribute("value");.

private string CopyProfileDLS_Intercept_AddPhone_Unify()
{
    string CurrentProfileDLS = null;
    var elmC = web_Browser.Document.GetElementsByTagName("select");
    foreach (HtmlElement elm in elmC)
    {
        if (elm.Id == "DLSProf")
        {
            if (elm.InnerText.Contains("settings"))
            {
                CurrentProfileDLS = elm.GetAttribute("value");
            }
            break;
        }
    }
    return CurrentProfileDLS;
}
...