我有这段代码:
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?)
这是什么意思?我该如何解决这个问题?请。 两个语句都在相同的范围内(例如,在同一个类中)。
答案 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,
"",
""
);
这可以防止您设置可为空的结构属性的任何麻烦。