将值分配给控件中的变量“空”,必须有更好的方法!

时间:2010-02-18 13:00:20

标签: c# .net winforms controls null

我有一个winform应用程序供室内使用,下面是非常常见的。

            Int32? afhAgreement = null;
            if (!lkuReveiewAFHAgreement.Text.Equals(string.Empty))
            {
                afhAgreement = (Int32)lkuReveiewAFHAgreement.EditValue;
            }
            DateTime? afhAgreementDate = null;
            if (datAFHAgreementCompleted.Text != String.Empty)
            {
                afhAgreementDate = (DateTime?)datAFHAgreementCompleted.EditValue;
            }
            Int32? crisisPlan = null;
            if (!lkuReview6MonthCrisisPlan.Text.Equals(string.Empty))
            {
                crisisPlan = (Int32)lkuReview6MonthCrisisPlan.EditValue;
            }
            DateTime? crisisPlanDate = null;
            if (dat6MonthCrisisPlanReviewed.Text != String.Empty)
            {
                crisisPlanDate = (DateTime?)dat6MonthCrisisPlanReviewed.EditValue;
            }
            Int32? riskAgreement = null;
            if (!lkuReviewRiskAssessment.Text.Equals(string.Empty))
            {
                riskAgreement = (Int32)lkuReviewRiskAssessment.EditValue;
            }
            DateTime? riskAgreementDate = null;
            if (!datRiskAssessmentReviewed.Text.Equals(string.Empty))
            {
                riskAgreementDate = (DateTime?)datRiskAssessmentReviewed.EditValue;
            }

看到所有这些变量都可以NULL,这似乎是一种荒谬的方式。不是Convert this object and Default to NULL吗?

顺便说一下,EditValue是一个对象,虽然我相信即使我使用控件的Text属性也有同样的问题。

那么,有更好的方法吗?这是我可以使用Extension Methods简化的内容吗?

2 个答案:

答案 0 :(得分:4)

只需添加一些可重复使用的功能......例如:

static T? GetValue<T>(YourControlType control) where T : struct
{
    if (string.IsNullOrEmpty(control.Text)) return null;
    return (T)control.EditValue;
}

然后(例如):

DateTime? crisisPlanDate = GetValue<DateTime>(dat6MonthCrisisPlanReviewed);

(其中YourControlType是您对string .Textobject .EditValue使用的控件

答案 1 :(得分:1)

像这样......

afhAgreement = (!lkuReveiewAFHAgreement.Text.Equals(string.Empty)) ? (Int32)lkuReveiewAFHAgreement.EditValue : null;

riskAgreement = (!lkuReviewRiskAssessment.Text.Equals(string.Empty))  ? (Int32)lkuReviewRiskAssessment.EditValue : null;