初始化多个空列表

时间:2013-01-16 16:15:03

标签: c#

简单的句法c#问题是这个。

鉴于此代码:

List<string> Columns = new List<string>();
List<string> Parameters = new List<string>();
List<string> Values = new List<string>();

可以简化为:

List<string> Columns = new List<string>(), Parameters = new List<string>(), Values = new List<string>();

但我可以缩短它,因为它们都被初始化为空列表吗?

谢谢大家!

5 个答案:

答案 0 :(得分:13)

如果这些变量不是类字段,我建议使用var关键字,因为类型是从使用中知道的。三个变量的平坦声明真的没有意义。

var Columns = new List<string>();
var Parameters = new List<string>();
var Values = new List<string>();

是的,你可以做一些事情,比如在一行中声明多个局部变量,然后在一行中初始化它们。但是请避免在一行中声明多个变量 - 它使代码更具可读性。

答案 1 :(得分:4)

纯粹作为琐事/代码高尔夫的一点:

Func<List<string>> n = () => new List<string>();
List<string> a = n(), b = n(), c = n(), d = n(), e = n(), f = n();

但是用它代替更清晰的结构是荒谬的。如果初始化更复杂,并且代码被正确命名和间隔,可能具有值。

Func<List<string>> setupFoo = () => {
    return new List<string>() { 1, 2, 3 };
};

var option1 = setupFoo();
var option2 = setupFoo();
var option3 = setupFoo();

答案 2 :(得分:2)

这不是一个很好的做法,但是如果你在单个.cs文件中大量初始化字符串列表,你可以使用文件的其他using语句为该类添加别名:

using StringList = List<string>;

然后声明和初始化它们的代码将是:

StringList Columns = new StringList(), 
           Parameters = new StringList(), 
           Values = new StringList();

答案 3 :(得分:2)

你不能再缩短了。

可以使用某种“空列表工厂”:

public static List<string> EmptySList()
{
    return EmptyList<string>();
}

public static List<T> EmptyList<T>()
{
    return new List<T>();
}

...

List<string> Columns = EmptySList(), Parameters = EmptySList(), Values = EmptySList();

老实说,您可能不想缩短代码。只需编写可读和可维护的内容:

var columns = new List<string>();
var parameters = new List<string>();
var values = new List<string>();

答案 4 :(得分:-1)

IEnumerable是集合的最基本接口。
使用它,您可以动态实例化任何类型的集合。

对于空列表,请使用。

Enumerable.Empty<TYPE>();

在您的示例中...

using using System.Collections.Generic;
...
IEnumerable<string> Columns = Enumerable.Empty<string>();
IEnumerable<string> Parameters = Enumerable.Empty<string>();
IEnumerable<string> Values = Enumerable.Empty<string>();