当前位置:  开发笔记 > 编程语言 > 正文

C#动态选择字符串列表

如何解决《C#动态选择字符串列表》经验,为你挑选了3个好方法。

我正试图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返回stringint.



1> Rob..:

您需要投射项目,如下所示:

List things = objects.Select(x => x.nameref.ToString()).Cast().ToList();

它不能识别ToString()返回字符串的原因是它在一个dynamic对象上被调用,而方法绑定在运行时完成,而不是在编译时完成.



2> Heinzi..:

虽然接受的答案工作正常,但我建议一个替代方案:nameref转换为正确的类型((object)如果您碰巧知道类型,则替换为更具体的类型nameref):

List things = objects.Select(x => ((object)x.nameref).ToString()).ToList();

该解决方案的优点ToString是静态解决.因此,方法调用是

保证返回string,因为编译器知道您正在调用Object.ToString()(或其重写的变体)和

更快更清洁.该解决方案将动态分辨率保持在所需的绝对最小值(即分辨率x.nameref).调用中的错别字ToString被编译器捕获.

(当然,如果nameref碰巧是字符串的类型,你可以放弃调用ToString(),使你的代码更清晰,更短.)



3> shree.pat18..:

您可以尝试使用Cast,如下所示:

List things = objects.Select(x => x.nameref).Cast().ToList();

你也可以尝试Select自己投射:

List things = objects.Select(x => x.nameref as string).ToList();

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有