2017-08-08 19 views
0
private void SharingFieldOE2WellOE(InputData inputData) 
{ 
    var resultsField = new Object(); 

    if (inputData.CashflowModel.Equals("BC")) 
    { 
     resultsField = new List<ResultsBC>(); 
    } 
    else if (inputData.CashflowModel.Equals("GC")) 
    { 
     resultsField = new List<ResultsGC>(); 
    } 

    resultsField[1].Date = "08/08/2017" 
} 

上面我不能用指數resultsField因爲是Object類型,而不是一個列表<結果? >如我所願。 我在做什麼錯了,或者如何將這個對象轉換爲我定義的類型? 只會存在一個結果??類型。我可以使用null或某個空值初始化var嗎?對於之後將變量定義爲我定義的另一種類型?

+4

聽起來像是你需要創建一個包含ResultsBC'和'ResultsGC'之間'的公共屬性的接口。然後你只需要聲明你的變量爲:'名單 resultsField;' – maccettura

+3

號'var'是在設計時,編譯器確定。 –

+0

'var'它不是動態類型,它只是一個語法糖,所以當你使用關鍵字'var'時,編譯器知道變量的類型,並且你不能改變這個類型。所以,你可以使用一些常見的類型:接口或基類才達到你想要什麼,或者如果你使用這個列表其他地方你不得不到處宣稱用同樣的方式可以用'dynamic'類型,它 –

回答

0

您不能分配null聲明爲var的對象。

這可能幫助(我沒有測試過的代碼!)

ResultsBCResultsGC創建界面 - 姑且稱之爲IResults

private void SharingFieldOE2WellOE(InputData inputData) 
{ 
    IEnumerable<IResults> resultsField = null; 

    if (inputData.CashflowModel.Equals("BC")) 
    { 
     resultsField = new List<ResultsBC>(); 
    } 
    else if (inputData.CashflowModel.Equals("GC")) 
    { 
     resultsField = new List<ResultsGC>(); 
    } 

    // Convert IEnumerable to IList 
    List<IResults> list = resultsField.ToList(); 
    list[1].Date = "08/08/2017" 
} 

注意使用IEnumerable和它IList以後的轉換。我認爲ICollection不會允許這樣做。

這是一個很好的articlecovariancecontravariance

+0

這是各種各樣的錯誤。爲什麼你會使用基類而不是接口?你爲什麼要將'resultsField'變量初始化爲任何東西來擦除它?爲什麼'list'是'List '? – maccettura

+0

@maccettura代碼審查反饋實施和錯別字修復! :-) –

+0

'您不能將null指定爲聲明爲var.'的對象您當然可以。 'var n =(object)null;'你可以對任何可空類型做同樣的事情。 – Servy

相關問題