2012-12-10 33 views
1

我有2個類共享10個屬性中的9個。我正在嘗試做下面看到的內容,但是在當前上下文中不存在gc。我想知道是否存在asp.net隱式變量

 if (methodId == 2) 
    { 
     var gc = new LblPremium(id); 

    } 
    else 
    { 
     var gc = new LblIsoReport(id); 
    } 

    gc.Nbr = Nbr; 

    if (method == 2) { gc.Location = "Location Identification: " + pvtData.Location; } 
      .. 
      .. 

回答

1

嘗試:

var gc = (methodId == 2)? (LblBase)new LblPremium(id) : (LblBase)new LblIsoReport(id); 

其中LblBase是基類的LblPremiumLblIsoReport

+1

我不認爲這會在編譯時需要知道gc的類型。您將不得不使用動態或聲明gc作爲blPremium和LblIsoReport都從中繼承的某些基本類型。 –

+0

你說得對,需要有基類和類型轉換。 – Igor

+0

執行此操作的其他方法。我試過var gc = new Object(); if(methodId == 2) {但這似乎不工作 –

0

您在if和else代碼塊中聲明瞭gc,所以它不存在於它們之外。

您也不能像編譯時需要知道確切類型那樣使用var變量。

+0

感謝本。我如何在if之外聲明它,並且仍然可以使其工作? –

+0

看看我的回答)) – MikroDel

+0

你已經解釋了爲什麼他的代碼不起作用,但不是他爲了使其工作而需要做的*。 – Servy

-1
var gc = new Object(); 

//啓動程序的....

switch (methodId) 
{ 


case 1: 

//what you want; 

break; 



case 2: 
gc = new LblPremium(id); 
gc.Location = "Location Identification: " + pvtData.Location; 
gc.Nbr = Nbr; 
break; 

default: 
gc = new LblIsoReport(id); 
gc.Nbr = Nbr; 

break; 

} 
+0

它不會編譯,因爲'Object'沒有'Location'和'Nbr'的屬性。 – Igor

+0

你必須在程序的正確位置添加,否則你有一個錯誤。我們有一小部分代碼,答案是由那個完成的。如果對象沒有這個屬性,是一個類的問題,而不是這個答案。檢查你的班級。 – devilkkw