我正试图List
从我的动态对象列表中获取字符串,它一直说:
错误1无法将类型'
System.Collections.Generic.List
' 隐式转换为'System.Collections.Generic.List
'
我正在选择一个房产并使用.ToString()
它:
var objects = new List(); //filling objects here List things = objects.Select(x => x.nameref.ToString()).ToList();
那么它不是一个有效的字符串列表吗?为什么编译器假设此列表是类型的dynamic
?
我也试过转换这个答案,但它一直给我同样的错误.
谁知道怎么做List
?
编辑:
为什么不工作?因为你可以像这样弄乱:
public class Test { public int ToString() { return 0; } }
并且编译器不知道是否ToString
返回string
或int
.
您需要投射项目,如下所示:
Listthings = objects.Select(x => x.nameref.ToString()).Cast ().ToList();
它不能识别ToString()
返回字符串的原因是它在一个dynamic
对象上被调用,而方法绑定在运行时完成,而不是在编译时完成.
虽然接受的答案工作正常,但我建议一个替代方案:nameref
转换为正确的类型((object)
如果您碰巧知道类型,则替换为更具体的类型nameref
):
Listthings = objects.Select(x => ((object)x.nameref).ToString()).ToList();
该解决方案的优点ToString
是静态解决.因此,方法调用是
保证返回string
,因为编译器知道您正在调用Object.ToString()(或其重写的变体)和
更快更清洁.该解决方案将动态分辨率保持在所需的绝对最小值(即分辨率x.nameref
).调用中的错别字ToString
被编译器捕获.
(当然,如果nameref
碰巧是字符串的类型,你可以放弃调用ToString()
,使你的代码更清晰,更短.)
您可以尝试使用Cast,如下所示:
Listthings = objects.Select(x => x.nameref).Cast ().ToList();
你也可以尝试Select
自己投射:
Listthings = objects.Select(x => x.nameref as string).ToList();