c# - 这种初始化IList的奇怪方式是什么在 Xamarin 代码库中?
问题描述
我正在查看 Xamarin 代码库(在本例中为StackLayout
类),我在 C# 中使用了这行奇怪的代码,我无法理解其语法:
var layout = new StackLayout()
{
Children =
{ // What is this!!!?
new Label()
{
Text = "Hello",
},
new Entry()
{
Text = "Hi"
},
}
};
我不明白的代码是它初始化Children
属性的方式。Children
是一个没有 setter的get-only属性。
不仅正在初始化,而且还没有new List<>
before {
。
Resharper 可以将其转换为使用.Add()
而不是此初始化。所以它似乎不是初始化。
我认为 C# 中添加了一些我不知道的东西!
解决方案
这只是集合的“初始化语法”的一种变体,在初始化新实例中的属性值时有效。
初始化器语法通常允许在使用运算符时为属性分配值new
。然后,在该上下文中,集合初始化器语法将分配映射到对Add()
方法的一系列调用(如果存在,在这种情况下就是这样)。
这不是 Xamarin 独有的。这是一个简单的 C# 示例:
public class Class1
{
public IList<string> List { get; } = new List<string>();
public static Class1 M()
{
return new Class1
{
List =
{
"foo", "bar"
}
};
}
}
推荐阅读
- anaconda - 尝试在 conda 中安装 nvcc 时出错
- probability - 为什么这个高斯概率问题的答案是零?
- powershell - 如何使用 powerShell 脚本将文件从 s3 最新文件下载到本地文件夹并需要包含文件损坏检查点
- reactjs - React chrome 开发者工具组件选择器?
- javascript - 单页多模态窗口(灵活的JS方案)
- cassandra - 当行不存在时,Cassandra 删除
- proxy - 无法将 seleniumgrid 中的 docker chrome 节点绑定到代理容器
- batch-file - 从 Windows 10 cmd 中的相对路径运行时无法运行文件
- python-3.x - Python中的条件数据插补
- python - 为什么将 ISO 8859-1 嵌入到 unicode Python 字符串中?