使用多个命令在 class 中预定义字段
Predefine field in class using several commands
假设我有这个 class 和一个用两个条目填充内部列表的构造函数:
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
}
}
是否可以在字段定义中调用多个命令,如果可以,如何调用?
您可以像这样预先实例化 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");
集合中默认不提供此功能 Classes.You 必须为此实现您自己的 IList<T>
版本。
Lambda 表达式是一种实现此目的的方法,如您的更新所示...
知道了:
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; }
是一个不接受参数并返回一个 IList<int>
的函数,所以它是一个 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();
假设我有这个 class 和一个用两个条目填充内部列表的构造函数:
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
}
}
是否可以在字段定义中调用多个命令,如果可以,如何调用?
您可以像这样预先实例化 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");
集合中默认不提供此功能 Classes.You 必须为此实现您自己的 IList<T>
版本。
Lambda 表达式是一种实现此目的的方法,如您的更新所示...
知道了:
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; }
是一个不接受参数并返回一个 IList<int>
的函数,所以它是一个 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();