我如何将foreach循环转换为LINQ lambda
本文关键字:转换 LINQ lambda 循环 foreach | 更新日期: 2023-09-27 18:13:02
在这个类中,我定义了字符串方法,它通过它导航,并根据数字值创建一个字符串。
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);
}
我的理解是否正确,您希望为以下输入提供以下输出?
输入:1输出:测试
输入:2输出:测试
输入:3输出:TestTestTest
如果是的话,为什么不直接使用somevalue = dictionary[number]
呢?
try this:
return string.Join("", dictionary.Take(number).Select(x=>x.Value));
internal class Program
{
private static void Main(string[] args)
{
dictionary.Add(1, "Test");
dictionary.Add(2, "TestTest");
dictionary.Add(3, "TestTestTest");
Console.WriteLine("{0}", ReturnResult(3));
}
public static Dictionary<int, string> dictionary = new Dictionary<int, string>();
public static string ReturnResult(int index)
{
return dictionary.Where(x => x.Key.Equals(index)).Select(res => res.Value).First();
}
}
无论你的算法是否错误,它本质上是重复Dictionary
n
中第一项的值的次数(n
是传入的number
参数)。
如果这是你想要做的,那么你可以简单地做:
string somevalue = string.Join("", Enumerable.Repeat(dictionary.First().Value, number));