2

假设我有一个带有构造函数的类,该构造函数用两个条目填充内部列表:

class MyClass
{
    IList<int> someList;

    public MyClass()
    {
        someList = new List<int>();
        someList.Add(2);
        someList.Add(4);

        ... // do some other stuff
    }
}

现在假设我有几个构造函数,它们都对内部列表执行相同的操作(但在其他方面有所不同)。

我想知道是否可以将列表的生成和填充直接外包给字段,如下所示:

class MyClass
{
    IList<int> someList = new List<int>(); someList.Add(2); someList.Add(4);
    // Does not compile.

    public MyClass()
    {
        ... // do some other stuff
    }
}

是否可以在字段定义中调用多个命令,如果可以,如何调用?

4

2 回答 2

1

知道了:

IList<int> someList = new Func<List<int>>(() => { IList<int> l = new List<int>(); l.Add(2); l.Add(4); return l; })();

解释:

() => { IList<int> l = new List<int>(); l.Add(2); l.Add(4); return l; }

是一个不带参数并返回 a 的函数IList<int>,所以它是 a Func<IList<int>>

尽管编译器知道这一点,但似乎我必须通过以下方式明确说明这一事实

new Func<IList<int>>(...)

以后可以调用它。调用像往常一样通过()在 . 后面放置两个括号来完成Func

或者以更易读的方式编写它(然后我什至不需要new关键字,而是必须使Func静态):

static Func<IList<int>> foo = () => { IList<int> l = new List<int>(); l.Add(2); l.Add(4); return l; };

IList<int> someList = foo();
于 2016-08-03T12:55:51.377 回答
1

您可以像这样预先实例化IList并在每次访问索引器时添加您的值:

IList<int> someList = new List<int>() { 2, 4 };

这将在使用构造函数之前进行初始化。


更新 1

正如评论中提到的OP,因为LinkedList<T>()你必须使用一些构造函数IEnumarable(在我的示例中是一个数组)。

LinkedList<int> myList1 = new LinkedList<int>(new int[] {2,3,4});

更新 2

阅读您的最后一条评论后,您正在寻找Fluent Interfaces您的实例化过程。这是一种将函数链接在一起的方法,看起来像这样:

Customer c1 = new Customer()  
                  .FirstName("matt")
                  .LastName("lastname")
                  .Sex("male")
                  .Address("austria");

默认情况下,集合类中不提供此功能。您必须为此实现自己的版本IList<T>

Lambda 表达式是实现此目的的一种方法,就像您的更新显示...

于 2016-08-03T11:58:49.810 回答