Каков наилучший способ показать, что метод изменяет аргумент в c #? - PullRequest
2 голосов
/ 15 июня 2011

У меня есть метод, который помимо некоторых других действий также изменяет один из аргументов.Например:

public void DoSomeStuffAndModifyList(List<int> list)
{
   ...
   list.Add(newElement);
}

Мне кажется, что имени метода недостаточно для указания на это.Может быть, весь подход неверен или может использоваться ref или out ?

Ответы [ 6 ]

2 голосов
/ 15 июня 2011

Используйте описательное имя для вашего метода / аргументов

public void FillItems(string foo,IList<Item> itemsToFeed)
1 голос
/ 15 июня 2011

Не используйте ref, если в этом нет необходимости.

Если ваш метод

void DoSomething(List<int> list)
{
    list.Add(whatever);
}

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

Используйте ref, когда ваш метод действительно может изменить list на указывает на что-то отличное от исходного списка .Это может быть совершенно новый список, другой существующий список или нуль. И используйте ref только тогда, когда вы хотите, чтобы это изменение было видно у вызывающей стороны.

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

/// <summary>
/// Describe the method andhere
/// </summary>
/// <param name="list">Describe what's relevant about the parameter here.</param>

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

0 голосов
/ 15 июня 2011

Создать метод расширения .

public static class ListExtensions
{
    public static void DoSomeStuffAndModifyList(this List<int> list)
    {
       ...
       list.Add(newElement);
    }
)

И назвать его:

var gradeList = new List<int>();
gradeList.DoSomeStuffAndModifyList();
0 голосов
/ 15 июня 2011

Как насчет возврата нового списка:

public List<int> DoSomeStuff(List<int> list)
{
    ...
    return list.Concat(new[] { newElement });
}
0 голосов
/ 15 июня 2011

Я немного запутался в вашем вопросе. Вы спрашиваете, как назвать ваши методы?

Вы должны разбить свои действия на разные методы. Я бы не стал сильно беспокоиться о методе, который вызывает эти действия. Пока это достаточно наглядно, это должно быть хорошо.

Как сказал Джон Сондерс, разделите ваши методы на одну ответственность.

public List<int> GetList()
{
   //return list
}

public void ModifyList(List<int> list)
{
  //Modify list, you could return if you wanted to.
}

//Call 2 methods
List<int> list = GetList();
ModifyList(list);
0 голосов
/ 15 июня 2011

используйте ObservableCollection<T> и запустите CollectionChanged событие, когда оно изменилось http://msdn.microsoft.com/en-us/library/ms668604.aspx

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

public static List<int> DoSomeStuffAndModifyList(this List<int> list)
{
 ...
 list.Add(newElement);
 return list;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...