如何将值设置为可为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?)

这是什么意思?我该如何解决这个问题。。。?请两个语句都在同一范围内(例如,在同一类中)。

如何将值设置为可为null的结构成员

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; }