1

这是我的问题的延续:如何在 C# 中使用 Enumarable 反转一系列元素?

现在我只需要备用元素。这是我使用for循环的解决方案:

int Max = 10;
int limit = 5;
Dictionary<String , String> MyDict = new Dictionary<string,string>();
int j = 0;
for (int i = 0; i <Max; i++)
{
    if (i >= limit)
        MyDict.Add((i+1).ToString(), "None");
    else
        MyDict.Add((i+1).ToString(), j.ToString());
    j+=2;
}

输出就像

{ "1" "0"}
{ "2" "2"}
{ "3" "4"}
{ "4" "6"}
{ "5" "8"}
{ "6" "None"}
{ "7" "None"}
{ "8" "None"}
{ "9" "None"}
{ "10" "None"}

如何使用Enumarerable或使用任何 LINQ 方法来执行此操作。也与我之前的问题相反:如何在 C# 中使用 Enumarable 反转一系列元素?

4

3 回答 3

8

您可以使用标准 LINQWhere扩展方法作为执行所需操作的基础。

给定它的列表IEnumerable<T>将像这样工作:

var evens = list.Where((t, i) => i % 2 == 0);
var odds = list.Where((t, i) => i % 2 == 1);

希望你可以在这些基础上做你想做的事。

于 2010-11-08T12:20:34.950 回答
2
int max = 10;
int limit = 5;

var dict = Enumerable.Range(1, max)
                     .ToDictionary(x => x.ToString(),
                                   x => (x > limit) ? "None"
                                                    : ((x - 1) * 2).ToString());
于 2010-11-08T12:19:53.257 回答
0

我认为没有标准的 LINQ 方法可以做到这一点。但是您可以创建自定义 IEnumerable 扩展方法来执行此类操作。

http://msdn.microsoft.com/en-us/library/cc981895.aspx

替代元素是此处的示例之一。基本上,它只是将您的示例代码打包为扩展,以便您获得所需的语法。

于 2010-11-08T12:14:43.050 回答