如何将值设置为可为null的结构成员
本文关键字:null 结构 成员 设置 | 更新日期: 2023-09-27 17:59:31
我有这个代码:
public IfStatement? m_IfStatement;
public struct IfStatement
{
public string Statement { get; private set; }
public string Comparison { get; private set; }
public string ConditionValue { get; private set; }
public string IfCondition_True { get; private set; }
public string IfCondition_False { get; private set; }
}
当我试图将值设置为这样的结构时:
m_IfStatement = new IfStatement();
m_IfStatement.Statement = cboIfStatement.SelectedItem.ToString();
m_IfStatement.Comparison = cboComparison.SelectedItem.ToString();
m_IfStatement.ConditionValue = txtIfValue.Text;
m_IfStatement.IfTrue = "";
m_IfStatement.IfFalse = "";
我从压缩编译器得到这个错误:
'System.Nullable<Core.BaseControls.IntegrationTool.frmDataManipulation.IfStatement>'
does not contain a definition for 'Statement' and no extension method 'Statement'
accepting a first argument of type
'System.Nullable<Core.BaseControls.IntegrationTool.frmDataManipulation.IfStatement>'
could be found (are you missing a using directive or an assembly reference?)
这是什么意思?我该如何解决这个问题。。。?请两个语句都在同一范围内(例如,在同一类中)。
Nullable
使用Value
属性键入访问。可为空类型
public IfStatement? m_IfStatement;
public struct IfStatement
{
public string Statement { get; set; }
public string Comparison { get; set; }
public string ConditionValue { get; set; }
public string IfCondition_True { get; set; }
public string IfCondition_False { get; set; }
}
m_IfStatement = new IfStatement();
IfStatement ifStat = m_IfStatement.Value;
ifStat.Statement = cboIfStatement.SelectedItem.ToString();
ifStat.Comparison = cboComparison.SelectedItem.ToString();
ifStat.ConditionValue = txtIfValue.Text;
ifStat.TrueCondition = "";
ifStat.FalseCondition = "";
由于结构是值类型(因此不能为null),并且您希望它可以为null,因此应该创建一个构造函数来设置属性。通过这种方式,您可以将您的房产交给私人出租人保管。
public struct IfStatement {
public IfStatement (string statement, string comparison, string conditionValue, string ifCondition_True, string ifCondition_False) {
Statement = statement;
Comparison = comparison;
ConditionValue = conditionValue;
IfCondition_True = ifCondition_True;
IfCondition_False = ifCondition_False;
}
public string Statement { get; private set; }
public string Comparison { get; private set; }
public string ConditionValue { get; private set; }
public string IfCondition_True { get; private set; }
public string IfCondition_False { get; private set; }
}
像一样使用
m_IfStatement = new IfStatement(
cboIfStatement.SelectedItem.ToString(),
cboComparison.SelectedItem.ToString()
txtIfValue.Text,
"",
""
);
这将防止您在设置可为null的结构的属性时遇到任何问题。
在您的第一部分中,您有以下内容:
public string Statement { get; private set; }
和你的第二个
m_IfStatement.Statement = cboIfStatement.SelectedItem.ToString();
您正在设置的第二部分Statement,您在第一部分中定义了只能在结构本身中执行的语句(即将其标记为private)。
要解决此问题,只需将您的定义更改为:
public string Statement { get; set; }