Рефакторинг двух методов в одном (дженерики?) - PullRequest
0 голосов
/ 16 марта 2020

У меня есть два метода для двух разных элементов управления, чтобы выполнить одно и то же действие:

public void DisplayTextForLabel<T>(Label pControl, string pText)
{
   pControl.Text = pText;
}
public void DisplayTextForLinkLabel<T>(LinkLabel pControl, string pText)
{
   pControl.Text = pText;
}

Есть ли способ сделать это одним способом, например:

public void DisplayTextForControl<T>(T pControl, string pText)
{
   pControl.Text = pText;
}

Ответы [ 3 ]

3 голосов
/ 16 марта 2020

Нет необходимости добавлять дженерики

Попробуйте:

public void DisplayTextForControl(Control pControl, string pText)
{
   pControl.Text = pText;
}

, если вы хотите выполнить какое-либо действие по управлению определенным типом, тогда вы всегда можете выполнить приведение и проверить его

EG:

public void DisplayTextForControl(Control pControl, string pText)
{
    pControl.Text = pText;

    if(pControl is LinkLabel llbl)
    {
         //Perform link label related actions
    }
    else if(pControl is Label lbl)
    {
         //Perform label related actions
    }
}

Согласно ОП. Вы можете попробовать изменить тип на RepositoryItemLookUpEditBase

0 голосов
/ 16 марта 2020

Если вам действительно нужно сделать это с помощью дженериков, вам нужно найти общего предка двух типов, например, control. Что-то вроде ...

public T SetControlText<T>(T control, string text) where T : Control
{
    control.Text = text;
    return control;
}

Я не уверен, зачем вам нужны дженерики в этом случае.

0 голосов
/ 16 марта 2020

Вам все еще не нужен универсальный c метод. Подойдет простой метод расширения.

public static class ControlExtensions
{
    public static void SetText(this DevExpress.ExtraEdtiors.BaseControl ctl, string text)
    {
        ctl.Text = text;
    }
}

xbutton.SetText("Hello");
xlabel.SetText("Hello");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...