C # Метод массива, помощь - PullRequest
4 голосов
/ 19 июля 2010

Может, кто-нибудь покажет мне, как я могу переписать описанный ниже метод более качественным и элегантным способом?

// in class------------------

    public static void RefreshAllDropdownlists(DropDownList ddlRemoveUsersFromRole, DropDownList ddlAddUsersToRole, DropDownList ddlAddAllUsersToRole, DropDownList ddlRemoveAllUsersFromRole, DropDownList ddlDeleteAllUsersFromRole)
    {
        ddlRemoveUsersFromRole.ClearSelection();
        ddlAddUsersToRole.ClearSelection();
        ddlAddAllUsersToRole.ClearSelection();
        ddlRemoveAllUsersFromRole.ClearSelection();
        ddlDeleteAllUsersFromRole.ClearSelection();
    }

// in codebehind------------------

UserGvUtil.RefreshAllDropdownlists(ddlRemoveUsersFromRole, ddlAddUsersToRole, ddlAddAllUsersToRole, ddlRemoveAllUsersFromRole, ddlDeleteAllUsersFromRole);

Спасибо!

Ответы [ 4 ]

7 голосов
/ 19 июля 2010

Используйте модификатор параметра params для передачи массива DropDownList s:

public static void RefreshAllDropdownlists(params DropDownList[] dropDownLists)
{
    foreach (DropDownList ddl in dropDownLists)
    {
        ddl.ClearSelection();
    }
}

Использование такое же, как с вашим текущим методом

2 голосов
/ 19 июля 2010
var listsToRefresh = new List<DropDownList>
                {
                    ddlRemoveUsersFromRole,
                    ddlAddUsersToRole,
                    ddlAddAllUsersToRole,
                    ddlRemoveAllUsersFromRole,
                    ddlDeleteAllUsersFromRole
                };
listsToRefresh.ForEach(l=>l.ClearSelection());

Есть много способов сделать это, я бы предпочел этот. Если все, что вы делаете, выполняет ClearSelection () для каждого из них, то нет необходимости создавать метод для этой одной строки кода. Однако, если вы хотите поработать над каждым DropDownlist, я думаю, что использование метода расширения сделает его элегантным.

 public static class DropDownListExtensions
    {
        public static void Reset(this DropDownList dropDownList)
        {
            dropDownList.ClearSelection();
            //... do more stuff

        }
    }

listsToRefresh.ForEach(l=>l.Reset());
1 голос
/ 19 июля 2010

Вы можете передать список объектов DropDownList в функцию, тогда вы можете сделать:

public static void RefreshAllDropdownlists(List<DropDownList> lists)
{
   foreach(DropDownList dropDown in lists)
   {
     dropDown.ClearSelection();
   }
}
1 голос
/ 19 июля 2010

Что-то вроде

public static void RefreshAllDropdownlists(params DropDownList[] dropDownLists)
{
    if (dropDownLists != null)
        foreach (var ddl in dropDownLists)
            ddl.ClearSelection();
}

?

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