这是我的问题的延续:How to get reverse of a series of elements using Enumarable in C#?
现在我只需要替代元素。这是我使用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方法执行此操作。而且与我之前的问题相反:How to get reverse of a series of elements using Enumarable in C#?
答案 0 :(得分:8)
您可以使用标准的LINQ Where
扩展方法作为满足您需求的基础。
给定一个IEnumerable<T>
列表,它会像这样工作:
var evens = list.Where((t, i) => i % 2 == 0);
var odds = list.Where((t, i) => i % 2 == 1);
希望你可以在这些基础上做你想做的事。
答案 1 :(得分: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());
答案 2 :(得分:0)
我认为没有标准的LINQ方法可以做到这一点。但您可以创建自定义IEnumerable扩展方法来执行此类操作。
http://msdn.microsoft.com/en-us/library/cc981895.aspx
替代元素是此处的示例之一。基本上它只是将您的示例代码并将其打包为扩展,以便您获得所需的语法。