如下面的代码片段所示,为什么推导的list
类型在VS2017中是动态的?因此,此代码将产生编译错误。而且我注意到,如果将dynamic
关键字更改为var
,则一切正常。
如果我想继续使用dynamic
关键字,该如何解决?
class Program
{
static void Main(string[] args)
{
dynamic d = new ExpandoObject();
var list = GetList(d); // ===> vs deduced list as dynamic
var r = list.Select(x => x.Replace("a", "_"));
var slist = new List<string>();
var sr = slist.Select(x => x.Replace("a", "_"));
Console.WriteLine(r.Count());
}
static List<string> GetList(ExpandoObject obj)
{
List<string> list = new List<string>() { "abc", "def" };
return list;
}
}
答案 0 :(得分:1)
可以推断涉及声明为dynamic
的参数的操作,以自行返回动力学。来自c# reference:
大多数动态操作的结果本身就是动态的。结果不是动态的操作包括:(1)从动态转换为另一种类型(2)包含动态类型参数的构造函数调用。
如果要转换回非动态类型,只需按照所需方式声明变量。这有效:
List<string> list = GetList(d);
...并且将允许您其余的代码进行编译。