c# - 这个对象初始化器模式叫什么?

标签 c#

我正在审查一些我不认识的对象初始化模式的代码 - 谁能告诉我这个模式叫什么(以及在哪里可以找到有关使用的文档)?

obj.myType = (myVar = new MyType());

如果重要,具体用例如下;

protected MyType myVar;
protected readonly MyComplexType myComplexType;

protected void Page_Init(object sender, EventArgs e)) {
    ...
    myComplexType.myType = (myVar = new MyType());
    ...
}

最佳答案

它只是将相同的值分配两次 - 一次分配给 myVar,一次分配给 myComplexType.myType

相当于

var tmp = new MyType();
myVar = tmp;
myComplexType.myType = tmp;

(在某些复杂的情况下,可能会进行类型转换,但我不希望在这种特殊情况下发生任何类型转换。)

当然,您不需要使用额外的局部变量。此代码“有些等效”,但涉及从 myVar 读取,因此不是完全等效的,但更可能是您使用的代码:

myVar = new MyType();
myComplexType.myType = myVar;

这个没有具体的名称,相对很少在表达式的其他地方使用赋值的结果,最常见的例子是:

string line;
while ((line = reader.ReadLine()) != null)
{
    ...
}

关于c# - 这个对象初始化器模式叫什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36493525/

相关文章:

c# - CS0121 - Roslyn、CSC v12.0 和 mono 编译器之间的重载解析不一致

c# - 使用属性在 C# 中封装数据

c# - 如何为脚手架注册自定义 EF Code First 迁移操作?

c# - 尝试使用 C# 程序从 NetSuite 中的 FileCabinet 下载文件

c# - 是否有数据注释来禁用仅对属性的客户端验证?

c# - Windows 10通用应用程序,访问我的设备信息时抛出异常: 'System.UnauthorizedAccessException' in app. exe?

c# - MVVM - 处理需要在 ViewModel 表示的基础模型上执行的操作

c# - 加载时Listview太慢

C# 无法使用自定义验证属性验证属性

c# - Async/Await 最大并发 http 请求数