【发布时间】:2013-05-09 19:16:09
【问题描述】:
在这个类中,我定义了它在其中导航的字符串方法,并根据数字值创建一个字符串。
public class Class1
{
public string Returnstring (int number)
{
var dictionary = new Dictionary<int, string>();
dictionary.Add(1, "Test");
dictionary.Add(2, "TestTest");
dictionary.Add(3, "TestTestTest");
string somevalue = string.Empty;
foreach (var simple in dictionary)
{
while (number >= simple.Key)
{
somevalue += simple.Value;
number -= simple.Key;
}
}
return somevalue;
}
}
我只想知道如何将 foreach 循环转换为 LINQ lambda。
这是我为该类编写的测试方法。
[TestMethod]
public void Given_1_when_Returnstring_Then_Should_Return_Test()
{
Class1 class1=new Class1();
string number = class1.Returnstring(1);
string expectedstring= "Test";
Assert.AreEqual(expectedstring, number);
}
【问题讨论】:
-
你尝试了什么?什么没用?你所要求的很简单,只要你付出一些努力。
-
即使可以,也不应该。 LINQ 被设计成一个函数式框架,LINQ 语句中的操作不应该有副作用。
-
这段代码的目的是什么?如果看起来它重复第一个字典的值
number次,然后忽略字典的其余部分。 -
为什么需要在那里使用 LINQ?
-
LINQ 中没有 foreach 方法(如上所述,查询不应该产生副作用),但不要超越自己。 你可以做什么而不是使用 foreach 是过滤你拥有的集合(即列表和字典)到你需要的东西(例如
Where、Join、Select等)然后执行一些操作(例如Sum)。在某些情况下,您确实需要使用 foreach 进行迭代,但大多数情况下;只需通过 LINQ 过滤数据就足够了。