控制转换出错 - C#ASP.NET

时间:2016-05-19 07:54:05

标签: c# asp.net generics

现在,我正在尝试重构我的c#代码,我需要一些建议:) 对不起,如果有任何语法/拼写错误,英语不是我的母语

我的代码中多次更改TableCells,TextBox,Label等文本...稍加测试(在DateTime上始终进行相同的测试)。 所以我发现将所有这些重构成一个通用方法会很棒。但是我有一些问题。

这是我的方法代码:

 private void testDateTimeNonValideIntoControls<T>((DateTime date, ref Control control)
 {
        string convertedDate = date.ToString("dd/MM/yyyy");
        if (typeof(T) == typeof(System.Web.UI.WebControls.Label))
        {
            if (convertedDate != "01/01/0001") 
                ((Label)control).Text = convertedDate; 
            else
                ((Label)control).Text = " --- "; 
        }

        if (typeof(T) == typeof(System.Web.UI.WebControls.TableCell))
        {
            if (convertedDate != "01/01/0001") 
                ((TableCell)control).Text = convertedDate; 
            else
                ((TableCell)control).Text = " --- "; 
        }

        [...]

    }

我不熟悉泛型方法/类,但我认为该方法有问题。

但是,当我打电话给它时:

testDateTimeNonValideIntoControls((DateTime date,ref Control control)

testDateTimeNonValideIntoControls<Label>(date1st, ref (Control)LabelValueDatePremContrat);

我在&#39;控制&#39;上有错误。投。 &#34; ref或out参数必须是可赋值变量&#34; 所以我试着做一些像

这样的事情
ref (Control)(ref LabelValueDD)

但是不,再次。

任何人都能在这方面给我一些帮助吗?我希望能够使用通用方法:)!

2 个答案:

答案 0 :(得分:0)

正如所写的那样,它没有充分利用泛型,并且可以在没有它们的情况下编写,所以类似于:

private void testDateTimeNonValideIntoControls(DateTime date, Control control)
{
    string convertedDate = date.ToString("dd/MM/yyyy");
    if (string.Equals(convertedDate, "01/01/0001"))
    {
        convertedDate = " --- "; 
    }

    var lbl = control as Label;
    if (lbl != null)
    {
        lbl.Text = convertedDate;
    }
    else
    {
        var td = control as TableCell;
        if (td != null)
        {
            td.Text = convertedDate;
        }

        // [...]
    }
}

答案 1 :(得分:0)

将方法标题更改为

private void testDateTimeNonValideIntoControls<T>(DateTime date,Control control)

(在&#39;控制&#39;旁边删除了参考号)

此外,

我会按照Rownland的回答。我忘记了&#39; as&#39;字

由于