C# 简化的集合初始化
初始化WF4活动时,我们可以执行以下操作:C# 简化的集合初始化,c#,collections,initialization,C#,Collections,Initialization,初始化WF4活动时,我们可以执行以下操作: Sequence s = new Sequence() { Activities = { new If() ..., new WriteLine() ..., } } 请注意,Sequence.Activities是一个集合,但它可以在没有新集合的情况下初始化() 如何在我的集合属性上模拟此行为?任何具有Add()方法并实现IEnumerable的集合都可以这样初始化。有关详细信息,请参阅。(缺少新的集
Sequence s = new Sequence()
{
Activities = {
new If() ...,
new WriteLine() ...,
}
}
请注意,Sequence.Activities
是一个集合
,但它可以在没有新集合的情况下初始化()
如何在我的
集合
属性上模拟此行为?任何具有Add()
方法并实现IEnumerable
的集合都可以这样初始化。有关详细信息,请参阅。(缺少新的集合调用是由于对象初始值设定项,而内联添加项的能力是由于集合初始值设定项。)
编译器将使用集合初始化块中的项自动调用类上的Add()
方法
作为一个示例,下面是一段非常简单的代码来演示:
using System;
using System.Collections.ObjectModel;
class Test
{
public Test()
{
this.Collection = new Collection<int>();
}
public Collection<int> Collection { get; private set; }
public static void Main()
{
// Note the use of collection intializers here...
Test test = new Test
{
Collection = { 3, 4, 5 }
};
foreach (var i in test.Collection)
{
Console.WriteLine(i);
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
使用系统;
使用System.Collections.ObjectModel;
课堂测试
{
公开考试()
{
this.Collection=新集合();
}
公共集合{get;private set;}
公共静态void Main()
{
//请注意此处集合初始化器的使用。。。
测试=新测试
{
集合={3,4,5}
};
foreach(test.Collection中的变量i)
{
控制台写入线(i);
}
Console.WriteLine(“按任意键退出…”);
Console.ReadKey();
}
}
。。。它实现了IEnumerable:)@Jon:非常正确-我编辑得更加明确。(我倾向于总是在“集合”上实现IEnumerable,但这并不是一个要求;))是的,但我的集合使用的是System.Collections.ObjectModel.collection
,它已经实现了IEnumerable,并且有一个Add()方法。事实是,它没有给出任何编译错误,但在遍历它时它似乎是空的。此外,您给出的链接并没有举例说明这种类型的初始化。@Jota:实际上,正是这个链接显示了它是如何工作的。我只是提供了一些工作示例代码来演示。尝试上面的程序-它使用带有collection
的集合初始值设定项来精确处理此场景。