我有很多代码采用以下模式
void Add(int foo)
{
$my question
}
void Add(List<int> bar)
{
//do stuff
}
我想知道(除了写一个扩展方法),如果有什么比写作更短:
Add(new List<int>(new int[]{foo}));
每次我想调用第二种方法。希望在.net库中找到错过的宝石。
答案 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())
答案 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);
}
}