您好,我使用具有3个属性的类,其中一个属性是一个数组。我想将数据列表添加到类中。
public class model
{
public string Name { get; set; }
public string Status { get; set; }
public string[] Actions { get; set; }
}
在将值添加到上述类中时,如果status属性的值是“成功”,则必须为“操作”添加值“暂停和刷新”。否则,我必须添加“开始并刷新”值。当我尝试以下即时通讯时出现编译错误
model m = new model
{
Name = "aaa",
Status = "success",
Actions=new string[]{
if(status=="success){
"Stop",
"Restart"
}
}
};
是否可以根据上述条件增加价值?
答案 0 :(得分:1)
您可以使用ternary conditional operator,例如:
Actions = status=="success"
? new string[]{ "Stop", "Restart" }
: new string[]{ "Pause", "Refresh" }
答案 1 :(得分:0)
三元运算符用法示例:
var status = "success";
model m = new model
{
Name = "aaa",
Status = status,
Actions = status == "success"
? new[]
{
"Pause",
"Refresh"
}
: new[]
{
"Stop",
"Restart"
}
};
答案 2 :(得分:0)
您可以尝试以下方法:
Actions = status == "success"
? new string[]{"value"}
: new string[] {"another value"};
我们使用ternary conditional运算符将适当的值分配给Actions
。当条件status=="success"
为真时,将new string[]{"value"}
的值分配给Actions
。否则,将new string[] {"another value"}
的值分配给Actions
。
答案 3 :(得分:0)
从理论上讲,是的,从技术上讲,不是。
初始化程序只是一个代理,用于创建该结构的新实例,调用其默认构造函数,然后设置每个这些成员值。因此,从理论上讲,它可以正常工作,但是从语法上讲,由于尚未初始化模型,因此该阶段无法访问该模型。您需要自行设置。
如果是全局行为,则可以编写一个仅包含名称和状态的构造函数,然后填写操作,但是使用初始化程序,ctor总是首先执行,因此无法访问任何初始化程序数据。
编辑,因为显然需要一个。我说的是为什么OP试图执行的操作无法编译。您无法查询其他内联初始化的成员。是的,您可以通过预先声明状态变量来解决它。