c#中单项集合的简写

本文关键字:集合 单项 | 更新日期: 2023-09-27 18:01:54

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

void Add(int foo)
{
 $my question
}
void Add(List<int> bar)
{
//do stuff
}

我想知道(除了写一个扩展方法)如果有比写更短的东西:

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

每次我想调用第二个方法。

c#中单项集合的简写

如果您可以修改第二个方法,那么如果是

可能会更好
void Add(params int[] bar)
{
}

你可以叫它Add(foo, foo2, foo3)Add(myList.ToArray())

看一下params关键字

假设你使用c# 3或更高版本,你可以使用集合初始化器:

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

这相当于:

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

我不确定它是否足够短,但这将工作良好:

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

可以直接在List上使用集合初始化式:

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

我倾向于使用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 ())

您需要像下面这样重构代码:

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