C# 如何从参数化列表返回值<;字符串>;(整数、列表、字符串和行)

C# 如何从参数化列表返回值<;字符串>;(整数、列表、字符串和行),c#,C#,如何返回字符串列表并执行返回而不将其打印出来?该函数将获取字符串并按字典顺序重新排列它们。我的解决方案会打印出来。我尝试了以下方法: public static List<string> paragraph(int number, List<string> lines) { var words = lines.ToArray(); var sort = from x in words orde

如何返回字符串列表并执行返回而不将其打印出来?该函数将获取字符串并按字典顺序重新排列它们。我的解决方案会打印出来。我尝试了以下方法:

public static List<string> paragraph(int number, List<string> lines)
    {
        var words = lines.ToArray();

        var sort = from x in words
                   orderby x
                   select x;

        foreach (var item in sort)
        {
            Console.WriteLine(item);
        }
        return null;            
    }
公共静态列表段落(整数,列表行)
{
var words=lines.ToArray();
var sort=从x开始,以字表示
orderby x
选择x;
foreach(分类中的var项目)
{
控制台写入线(项目);
}
返回null;
}

我能找到的唯一解决办法就是把它们打印出来。我能看到结果。但是如何存储通过循环的
,并在main方法中打印出来呢?非常感谢您的帮助。

您正在打印中的每一行

foreach (var item in sort)  {    Console.WriteLine(item);    }
挡块 删除for循环并返回“sort.ToList()”如


在您的原始代码中进行了大量不必要的工作。这就是使用linq对原始列表排序并返回它所需的全部内容

public static List<string> paragraph(int number, List<string> lines)
{
    return lines.OrderBy(x => x).ToList();
}
公共静态列表段落(整数,列表行)
{
返回lines.OrderBy(x=>x.ToList();
}

编辑:修复了缺少的箭头和简化的

只是基于所用变量名称的模糊猜测(某种智能逆向工程)——可能不是OP想要的,但很明显他/她想要的不是她/他想要的

public static List<string> Words(int number, List<string> lines)
{
    var separators = new[] {',','.',';',' ','\n','\r'};
    return lines
                .SelectMany(l => l.Split(separators, StringSplitOptions.RemoveEmptyEntries)) // take all words from all lines
                .Select(w => w.ToLowerInvariant()) // make them lowercase
                .Distinct() // remove duplicates
                .OrderBy(w => w)  // lexicographical ordering
                .Take(number) // just to use the int parameter
                .ToList() // materialize result             
}
公共静态列表字(整数,列表行)
{
变量分隔符=new[]{',',',',';','',''''''.\n','\r'};
回程线
.SelectMany(l=>l.Split(分隔符、StringSplitOptions.RemoveEmptyEntries))//从所有行中提取所有单词
.Select(w=>w.ToLowerInvariant())//使其小写
.Distinct()//删除重复项
.OrderBy(w=>w)//字典顺序
.Take(number)//仅使用int参数
.ToList()//具体化结果
}

我将您的问题解释为:

如何获取字符串列表并按字典顺序重新排列,然后返回它们而不打印出来

如果是这种情况,只需调用
OrderBy
对行进行排序,然后返回调用
ToList()
的结果,即可实现查询:

public static List<string> GetOrderedLines(List<string> lines)
{
    return lines?.OrderBy(line => line).ToList();
}
公共静态列表GetOrderedLines(列表行)
{
返回行?.OrderBy(行=>line).ToList();
}

对不起,我不知道你在问什么?是否要对
行进行排序
并将排序后的列表作为单独的列表返回?如果不想打印它们,请删除
控制台.WriteLine
调用。是否要执行LINQ查询
sort.ToList()
将执行此操作。但是Rufus提出了一个有效的观点:实现查询的是
foreach
,而不是WriteLine()。或者您是说要返回
排序
而不是
空值
?另外,
整数
参数的作用是什么?代码中没有使用它。另外,如果您不想在方法内部输出结果,可以将其缩减为一行:
returnlines.OrderBy(line=>line.ToList()这仍然是不必要的代码。他将把行复制到单词中,而不是仅仅在行上使用linq。这是正确的,但是在方法中这样做会改变原始列表,因为它们是通过引用传递的。如果它是预期的,那么函数可能是无效的,但这会“混淆”外部使用此方法的人,因为该方法是公共的。
OrderBy
不会影响原始列表-它返回一个新的
iorderenumerable
,因此可以安全地执行
返回行。OrderBy(x=>x.ToList()您似乎将行中的每个条目都视为自己的列表。这可能会奏效,但远远超出了他的要求。
public static List<string> GetOrderedLines(List<string> lines)
{
    return lines?.OrderBy(line => line).ToList();
}