Оптимизировать код оператора if / else с помощью лямбды в C #? Попробуйте использовать только один кадр вместо parentIFrame и insrancedata - PullRequest
0 голосов
/ 08 июля 2019

У меня есть следующие строки кода, которые я хочу сократить, используя лямбда-выражение или что-нибудь более элегантное.

 HtmlControl parentIFrame = null;
 HtmlControl insurancedata = null;

if (!Resource.ControlType.ToLower().Equals("getactivityid"))
{
    parentIFrame = new HtmlControl(Resource.ProjectBrowserWindow);
       if (Resource.ControlType.ToLower().Equals("hyperlink"))
           parentIFrame.SearchProperties.Add(HtmlControl.PropertyNames.Id, "bike-insurance");
       else
           parentIFrame.SearchProperties.Add(HtmlControl.PropertyNames.Id, "section_wise_container");
}

if (Resource.ControlGenricName.ToLower().Contains("finalsubmitbutton"))
{
    insurancedata = new HtmlControl(parentIFrame);                    
    insurancedata.SearchProperties.Add(HtmlControl.PropertyNames.Id, 
    "ResultButton");
}

Ответы [ 3 ]

0 голосов
/ 08 июля 2019

Независимо от того, сколько я выгляжу, мне действительно неуместно использовать здесь лямбду.Попробуйте инкапсулировать ваш код в функции, таким образом вы скроете некрасивую часть.

Что-то вроде:

HtmlControl parentIFrame = GetParentIFrame();
HtmlControl insurancedata = GetInsuranceData(parentIFrame);

А затем:

HtmlControl GetParentIFrame()
{
    HtmlControl parentIFrame = null;
    if (!Resource.ControlType.ToLower().Equals("getactivityid"))
    {
        parentIFrame = new HtmlControl(Resource.ProjectBrowserWindow);
        if (Resource.ControlType.ToLower().Equals("hyperlink"))
           parentIFrame.SearchProperties.Add(HtmlControl.PropertyNames.Id, "bike-insurance");
        else
           parentIFrame.SearchProperties.Add(HtmlControl.PropertyNames.Id, "section_wise_container");
        return parentIFrame;
   }
   return parentIFrame;
}

HtmlControl GetInsuranceData(HtmlControl parentIFrame)
{
    HtmlControl insurancedata = null;
    if (Resource.ControlGenricName.ToLower().Contains("finalsubmitbutton"))
    {
        HtmlControl insurancedata = new HtmlControl(parentIFrame);                    
        insurancedata.SearchProperties.Add(HtmlControl.PropertyNames.Id, 
        "ResultButton");
    }
    return insurancedata;
}
0 голосов
/ 09 июля 2019

Используя метод расширения, вы можете упростить код, используя философию Fluent:

public static class HtmlControlExt {
    public static HtmlControl AddIdSearch(this HtmlControl ctrl, string name) {
        ctrl.SearchProperties.Add(HtmlControl.PropertyNames.Id, name);
        return ctrl;
    }
}

Теперь ваш код будет:

if (!Resource.ControlType.ToLower().Equals("getactivityid"))
{
    parentIFrame = new HtmlControl(Resource.ProjectBrowserWindow)
                        .AddIdSearch(Resource.ControlType.ToLower().Equals("hyperlink") ? "bike-insurance" : "section_wise_container");
}

if (Resource.ControlGenericName.ToLower().Contains("finalsubmitbutton"))
{
    insurancedata = new HtmlControl(parentIFrame)
                        .AddIdSearch("ResultButton");
}

ПРИМЕЧАНИЕ. Я бы исключил фигурные скобки из одного оператора if и сравнил бы строки с ==, чтобы код был еще короче:

if (!Resource.ControlType.ToLower() == "getactivityid")
    parentIFrame = new HtmlControl(Resource.ProjectBrowserWindow)
                        .AddIdSearch(Resource.ControlType.ToLower() == "hyperlink" ? "bike-insurance" : "section_wise_container");

if (Resource.ControlGenericName.ToLower().Contains("finalsubmitbutton"))
    insurancedata = new HtmlControl(parentIFrame)
                        .AddIdSearch("ResultButton");
0 голосов
/ 08 июля 2019

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

Вы можете сократить код на

  1. Объявление переменных при их использовании вместо
  2. Использование инициализатора объекта и синтаксиса инициализатора коллекции для добавления свойства
  3. Выбор значения свойства для установки вместо выбора логической ветви для его установки

Пример:

if (!Resource.ControlType.ToLower().Equals("getactivityid"))
{
    var parentIFrame = new HtmlControl(Resource.ProjectBrowserWindow)
    {
        SearchProperties =
        {
            HtmlControl.PropertyNames.Id, 
            (Resource.ControlType.ToLower().Equals("hyperlink")) ? "bike-insurance" : "section_wise_container" 
        }
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...