现在,我正在尝试重构我的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)
但是不,再次。
任何人都能在这方面给我一些帮助吗?我希望能够使用通用方法:)!
答案 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;字
由于