显示该方法修改c#中的参数的最佳方法是什么?

时间:2011-06-15 15:18:03

标签: c# methods

我有一个方法除了一些其他动作外还修改其中一个参数。 例如:

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

我认为该方法的名称不足以指向此。可能是整个方法都错了,或者可能会使用 ref out

6 个答案:

答案 0 :(得分:2)

为方法/参数使用描述性名称

public void FillItems(string foo,IList<Item> itemsToFeed)

答案 1 :(得分:1)

除非确实有必要,否则请勿使用ref

如果你的方法是

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

添加ref无效。您没有做任何需要它的事情,只是增加了额外的复杂性而没有任何好处,并且可能使维护程序员更难以推理该方法。

当您的方法实际上可以通过将其指向原始列表之外的其他内容时,ref使用list。这可以是一个全新的列表,另一个现有列表,或null。当您希望在调用者处看到此更改时,仅使用ref

对于您的方法,请探索重构它,以便可能无需在列表中添加或删除项目。完成此操作后,请正确命名方法。完成 后,使用方法和参数摘要注释来传达您认为有用的信息。

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

不要滥用ref关键字,执行适当的重构,执行使用文档。

答案 2 :(得分:0)

在更改时使用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;
}

答案 3 :(得分:0)

我对你的问题感到有些困惑。你在问如何命名你的方法吗?

你应该将你的行为分解为不同的方法。我不会太担心调用这些操作的方法。只要描述性足够,那应该没问题。

正如John Saunders所说,将你的方法分解为单一责任。

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);

答案 4 :(得分:0)

如何返回新列表:

public List<int> DoSomeStuff(List<int> list)
{
    ...
    return list.Concat(new[] { newElement });
}

答案 5 :(得分:0)

创建extension method

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

并称之为:

var gradeList = new List<int>();
gradeList.DoSomeStuffAndModifyList();