2017-08-08 18 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

相关问题