如何将var声明为存储控件值的全局?

时间:2014-08-18 08:22:53

标签: c# asp.net

我在CriminalityInformationFormViewDisposal中有两个单选按钮,我发现这个控件动态如下

var siaHasConvictions = 
((RadioButtonList)CriminalityInformationFormViewDisposal.FindControl(ContactEntity.SIA_HASCOVICTIONS));
var siaHasOffencesAwatingTrial = 
((RadioButtonList)CriminalityInformationFormViewTrial.FindControl(ContactEntity.SIA_HASOFFENCEAWAITINGTRIAL));

现在在一个页面上,每当我需要获取单选按钮的值时,即是否每次我需要定义var以首先找到控件然后检查其值...现在它增加了代码行..有什么办法,所以我可以让这个findcontrol部分全局为那一页,然后我访问它的价值就像我们做的正常控制,请帮助我这个,因为我试图在页面加载之前声明,,,但是为gridcontrol提供了错误

2 个答案:

答案 0 :(得分:2)

我认为没有简单的方法,但这可能会帮助您不要一遍又一遍地重复代码:

private RadioButtonList SiaHasConvictions
{
    get
    {
        return (RadioButtonList)CriminalityInformationFormViewDisposal.FindControl(ContactEntity.SIA_HASCOVICTIONS);
    }
}

使用此属性,您只需在代码中使用this.SiaHasConvictions即可。您可以通过在变量中保存引用一次来优化它:

private RadioButtonList _siaHasConvictions;
private RadioButtonList SiaHasConvictions
{
    get
    {
        if (this._siaHasConvictions == null)
        {
            this._siaHasConvictions = (RadioButtonList)CriminalityInformationFormViewDisposal.FindControl(ContactEntity.SIA_HASCOVICTIONS);
        }

        return this._siaHasConvictions;
    }
}

答案 1 :(得分:0)

使用@Patrick Hofman的第二段代码 NOT 保证了正确的行为。如果FindControl方法每次调用时都会返回不同的值,则此实现会出错,因为_siaHasConvictions一旦设置就不会再被更改。


然而,我受到了@Patrick Hofman关于使用属性的想法的启发,您可以在您的Property中使用??运算符来使事情变得更加容易:

private RadioButtonList _siaHasConvictions;
private RadioButtonList SiaHasConvictions
{
    get { return this._siaHasConvictions ?? (this._siaHasConvictions = (RadioButtonList)CriminalityInformationFormViewDisposal.FindControl(ContactEntity.SIA_HASCOVICTIONS)); }
}

Here是使用??运算符的解释和一些示例,简而言之:

  

??运算符称为null-coalescing运算符。如果操作数不为null,则返回左侧操作数;否则它会返回右手操作数。