在这个类中,我定义了它在其中导航的字符串方法,并根据数字值创建一个字符串。
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);
}
答案 0 :(得分:0)
根据我的理解,您是否需要以下输出以下输出?
输入:1 输出:测试
输入:2 输出:TestTest
输入:3 输出:TestTestTest
如果是这样,为什么不使用somevalue = dictionary[number]
?
答案 1 :(得分:0)
试试这个:
return string.Join("", dictionary.Take(number).Select(x=>x.Value));
答案 2 :(得分:0)
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();
}
}
答案 3 :(得分:0)
您的算法是否不正确,它基本上做的是重复Dictionary
n
次{(1}} n
中number
的第一项的值参数传入)。
如果这实际上是您想要做的,那么您可以这样做:
string somevalue = string.Join("", Enumerable.Repeat(dictionary.First().Value, number));