单项收集的简写c#

时间:2011-07-12 09:07:50

标签: c#

我有很多代码采用以下模式

void Add(int foo)
{
 $my question
}

void Add(List<int> bar)
{
//do stuff
}

我想知道(除了写一个扩展方法),如果有什么比写作更短:

Add(new List<int>(new int[]{foo}));

每次我想调用第二种方法。希望在.net库中找到错过的宝石。

6 个答案:

答案 0 :(得分:3)

假设您使用的是C#3或更高版本,则可以使用collection initializer

Add(new List<int> { foo });

这相当于:

List<int> tmp = new List<int>();
tmp.Add(foo);
Add(tmp);

答案 1 :(得分:3)

我不确定它是否足够短,但这也可行:

Add(new List<int> { foo });

答案 2 :(得分:3)

如果您可以修改第二种方法,那么可能会更好

void Add(params int[] bar)
{
}

然后您可以将其称为Add(foo, foo2, foo3)Add(myList.ToArray())

查看params keyword

答案 3 :(得分:2)

您可以直接在List上使用集合初始值设定项:

Add(new List<int> { foo }); 

答案 4 :(得分:2)

我倾向于使用IEnumerable用于序列参数和new []语法来传递隐式类型数组:

public void Add (IEnumerable<int> bar)
{
}

// accepts:
Add (new List<int> { 1, 2, 3 });
Add (Enumerable.Range (1, 10));
Add (new [] { 1 });

作为变体,您可能想要定义“放大”扩展方法:

public IEnumerable<T> Amplify (T item)
{
    yield return item;
}

Add (1.Amplify ())

答案 5 :(得分:0)

您需要重构与以下内容类似的代码:

void Add(int bar)
{
    //Code for single element
}
void Add(List<int> foo)
{
    foreach(int i in foo)
    {
        Add(i);
    }
}