【问题标题】:How to assign a same value to different properties using Object Initializer如何使用 Object Initializer 为不同的属性分配相同的值
【发布时间】:2013-01-23 12:42:50
【问题描述】:

我尝试在对象初始化程序中为两个不同的属性赋值,但失败了。

在下面的代码中,我尝试将 Expand 和 Select 属性分配为 true。 但我得到了错误'名称 Select 在当前不存在 上下文'

这是我的代码

public class MyClass{
public String Title{get;set;}
public String Key{get;set;}
public bool Expand{get;set;}
public bool Select{get;set;}
public bool Editable{get;set;}
}

new MyClass()
  {
   Title = "Murali",
   Key = "MM",                       
   Expand = Select = true
  }

我还需要根据这两个属性分配另一个可编辑的属性

有点像

new MyClass()
  {
   Ediatable=(Select && Expand)
  }

我该如何做上述逻辑? Object Initializer 是否支持它?

【问题讨论】:

  • 没有注意到担心,完全没有注意到。

标签: c# object-initializers


【解决方案1】:

您不能在 = 的右侧引用您正在构建的对象的属性,即,您只能分配给属性,但不能从中读取。

可能的解决方案:

var expandAndSelect = true;

var result = new MyClass
{
    Title = "Murali",
    Key = "MM",                       
    Expand = expandAndSelect,
    Select = expandAndSelect,
};

var select = true;
var expand = false;

var result = new MyClass
{
    Expand = expand,
    Select = select,
    Editable = select & expand,
};

【讨论】:

  • 好的。但我之前在正常的对象构造中这样做过。像 MyClass obj=new MyClass();对象选择=真; obj.edit=obj.select;我不知道为什么它在 Object Initializer 中不存在 :(
  • 对象初始化语法不支持这个。如果你想这样做,不要使用对象初始化语法。
  • 另一个重要的事实是我正在调用另一个 collection.Contains(key) 来获取它的布尔值。在这种情况下,它会再调用 2 次 :(
  • @Murali 只是出于好奇,您为什么从“普通对象构造”更改为对象初始化程序?一种可能性是对临时使​​用正常的属性分配。变量,然后从临时复制引用。每次属性分配成功后,变量都变为“永久”变量。这或多或少是对象初始化器所做的。
  • @JeppeStigNielsen,我开始使用带有 lambda 表达式的对象初始化器,类似于 collection.select(x=> new MyClass{...})。现在只会获得新的变化和更多的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 2021-12-20
  • 1970-01-01
相关资源
最近更新 更多