1

在这个类中,我定义了它在其中导航的字符串方法,并根据数字值创建一个字符串。

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);
}
4

4 回答 4

0

我的理解是否正确,您需要以下输入的以下输出?

输入:1 输出:测试

输入:2 输出:TestTest

输入:3 输出:TestTestTest

如果是这样,为什么不直接使用somevalue = dictionary[number]

于 2013-05-09T10:04:02.903 回答
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();
        }
    }
于 2013-05-09T10:23:27.807 回答
0

无论您的算法是否正确,它本质上都是重复第一项的Dictionary n值的次数(n作为number传入的参数)。

如果这实际上是您想要做的,那么您可以简单地执行以下操作:

string somevalue = string.Join("", Enumerable.Repeat(dictionary.First().Value, number));
于 2013-05-09T11:14:52.607 回答
0

尝试这个:

return string.Join("", dictionary.Take(number).Select(x=>x.Value));
于 2013-05-09T10:11:50.630 回答