我不知道如何使用「T」,但我從來沒有很好地理解它,但我確信答案會駐留在它周圍的任何東西......重構:如何重構未知類型?
我有一個巨大的開關,所有它是適用的一個屬性,對象和控件添加到集合,一種提取物>應用屬性>添加,如:
1開關
foreach (AdwizaControl control in form.AdwizaControls)
{
Panel panel = new Panel();
int x = 0, y = 0;
switch (control.Type)
{
case ControlType.CheckBox:
AdwizaCheckBox checkbox = (AdwizaCheckBox)control.AdwizaWebControl;
x = checkbox.X;
y = checkbox.Y;
panel.Controls.Add(checkbox);
break;
case ControlType.Bevel:
AdwizaBevel bevel = (AdwizaBevel)control.AdwizaWebControl;
bevel.Width = bevel.W;
bevel.Height = bevel.H;
panel.Controls.Add(bevel);
break;
checkbox.X和checkbox.Y是來自定義XML的屬性,在這裏我們將控制設置爲
...
第二開關(遍歷是一個RadPageView(Telerik的部件內部對照)
foreach (RadPageView pageView in multiPage.PageViews)
{
int controlCount = pageView.Controls.Count;
for (int i = 0; i < controlCount; i++)
{
if (pageView.Controls[i].GetType() == typeof(AdwizaControl))
{
switch (((AdwizaControl)pageView.Controls[i]).Type)
{
...
case ControlType.Grid:
AdwizaGrid pageViewGrid = (AdwizaGrid)((AdwizaControl)pageView.Controls[i]).AdwizaWebControl;
pageViewGrid.Attributes.Add(
"style", string.Format("position:absolute;top:{0}px;left:{1}px;", pageViewGrid.Y + increaseY, pageViewGrid.X + increaseX));
pageView.Controls.Add(pageViewGrid);
break;
case ControlType.Hyperlink:
AdwizaHyperlink pageViewHyperlink = (AdwizaHyperlink)((AdwizaControl)pageView.Controls[i]).AdwizaWebControl;
pageViewHyperlink.Attributes.Add(
"style", string.Format("position:absolute;top:{0}px;left:{1}px;", pageViewHyperlink.Y + increaseY, pageViewHyperlink.X + increaseX));
pageView.Controls.Add(pageViewHyperlink);
break;
case ControlType.ImageBox:
AdwizaImageBox pageViewImageBox = (AdwizaImageBox)((AdwizaControl)pageView.Controls[i]).AdwizaWebControl;
pageViewImageBox.Attributes.Add(
"style", string.Format("position:absolute;top:{0}px;left:{1}px;", pageViewImageBox.Y + increaseY, pageViewImageBox.X + increaseX));
pageView.Controls.Add(pageViewImageBox);
break;
case ControlType.Label:
AdwizaLabel pageViewlabel = (AdwizaLabel)((AdwizaControl)pageView.Controls[i]).AdwizaWebControl;
pageViewlabel.Attributes.Add(
"style", string.Format("position:absolute;top:{0}px;left:{1}px;", pageViewlabel.Y + increaseY, pageViewlabel.X + increaseX));
pageView.Controls.Add(pageViewlabel);
break;
case ControlType.Slavebox:
AdwizaSlavebox pageViewSlavebox = (AdwizaSlavebox)((AdwizaControl)pageView.Controls[i]).AdwizaWebControl;
pageViewSlavebox.Attributes.Add(
"style", string.Format("position:absolute;top:{0}px;left:{1}px;", pageViewSlavebox.Y + increaseY, pageViewSlavebox.X + increaseX));
pageView.Controls.Add(pageViewSlavebox);
break;
case ControlType.Repeatbox:
AdwizaRepeatBox pageViewrepeatbox = (AdwizaRepeatBox)((AdwizaControl)pageView.Controls[i]).AdwizaWebControl;
pageViewrepeatbox.Attributes.Add(
"style", string.Format("position:absolute;top:{0}px;left:{1}px;", pageViewrepeatbox.Y + increaseY, pageViewrepeatbox.X + increaseX));
pageView.Controls.Add(pageViewrepeatbox);
break;
它是作爲大它必須覆蓋我使用的所有對象...
我該如何在這個簡單的電話?像這樣:
ApplyPositionAttribute(
((AdwizaControl)pageView.Controls[i]).AdwizaWebControl);
有沒有辦法簡化這個?
新增 switch語句
此外它將有助於查看switch語句。 – 2010-03-02 08:49:24
添加了開關啓動代碼:) - dang ...我永遠不會知道T是多麼的神奇: -/ – balexandre 2010-03-02 09:52:11
是屬性屬性是AdwizaWebControl的一部分嗎?如果這是真的,我不知道爲什麼你需要投入實施(AdwizaLabel,AdwizalSlavebox等)。檢查修改的代碼答案 – 2010-03-02 10:16:16