清单排序 - 扩展方法不开火!

时间:2009-03-26 03:36:09

标签: c# linq extension-methods

我正在尝试对此列表进行排序:

public void Example()
{
    string target = "hello";

    List<string> myStings = new List<string>();

    myStings.Add("babab");
    myStings.Add("Helll");
    myStings.Add("atest");

    myStings.OrderBy(each => Distance(each, target));
}

public int Distance(string stringA, string stringB)
{
    // Whatever
}

问题是列表没有被排序,并且Distance方法没有被触发(我在那里放了一个断点但没有被击中)。

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:3)

这是因为 Linq's Deferred Execution

  

在LINQ中,查询的执行是   通常推迟到当时   你真的要求数据。

因此,要查看您的方法是否有效,请将ToList()方法应用于IOrderedEnumerable,以便实际请求数据,从而执行。

myStings = myStings.OrderBy(each => Distance(each, target)).ToList();

答案 1 :(得分:1)

myStings = myStings.OrderBy(每个=&gt;距离(每个,目标))。ToList();

答案 2 :(得分:1)

myStrings.OrderBy(each => Distance(each, target));

不会订购原始列表,它会返回一个有序列表。 你需要:

myStrings = myStrings.OrderBy(each => Distance(each, target)).ToList();

这将强制执行延期执行并为您提供所需的结果。