LINQ Select使用返回类型的方法-创建新列表[duplicate]

bq3bfh9z  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(143)

此问题在此处已有答案

Convert a list to a string in C#(14个答案)
6个月前关闭。
我只是一个初学者,我正在尝试学习LINQ。我有一个值列表,我希望根据一些计算得到一个不同的列表。例如,下面的内容经常在互联网上的各种示例中引用:

IEnumerable<int> squares = Enumerable.Range(1, 10).Select(x => x * x);

这里,“计算”是通过简单地将原始列表的成员乘以其自身来完成的。
我想用一个方法返回一个字符串并把x作为参数.
下面是我编写的代码:

namespace mytests{

    class program {

        static void Main (string[] args)
        {
            List<string> nums = new List<string>();
            nums.Add("999");
            nums.Add("888");
            nums.Add("777");
            
            IEnumerable<string> strings = nums.AsEnumerable().Select(num => GetStrings(num));
            Console.WriteLine(strings.ToString());

        }

        private static string GetStrings (string num){

            if (num == "999")
                return "US";
            else if (num == "888")
            {
                return "GB";
            }
            else
            {
                return "PL";
            }
            
        }

    }
}

它会编译,但在调试时,方法GetStrings从未被访问,字符串对象也没有任何成员。我希望它返回“US”、“GB”、“PL”。
有什么建议吗?

  • 谢谢-谢谢
zsohkypk

zsohkypk1#

IEnumerable<string>.ToString()方法未按预期运行结果将为
系统.集合.泛型.列表'1[系统.字符串]
如果要查看集合中保存的值,则应创建迭代。

foreach (var i in strings) 
    Console.WriteLine(i);

这行代码为你做了两件事。一件是把集合中的值写入控制台。另一件是迭代集合。在迭代过程中,需要值,linq将执行必要的操作(在你的例子中是GetStrings方法)。
目前您的程式码并未使用集合值,因此程式码不会评估这些值,也不会触发GetStrings方法。

相关问题