如何将值设置为可为空的struct成员

时间:2014-04-22 11:39:18

标签: c# struct

我有这段代码:

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?)

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

3 个答案:

答案 0 :(得分:1)

Nullable使用Value属性进行访问。 Nullable Types

 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 = "";

答案 1 :(得分:0)

在你的第一部分中你有这个:

public string Statement { get; private set; }

和你的第二个

m_IfStatement.Statement = cboIfStatement.SelectedItem.ToString();

您要设置的第二部分是您在第一部分中定义的,您只能在结构本身内进行(即将其标记为私有)。

要解决此问题,只需将您的定义更改为:

public string Statement { get; set; }

答案 2 :(得分:0)

由于结构是值类型(因此不能为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,
    "",
    ""
);

这可以防止您设置可为空的结构属性的任何麻烦。