在我发现之前的很长一段时间,新的dynamic关键字与C#的foreach声明不兼容:
using System;
sealed class Foo {
public struct FooEnumerator {
int value;
public bool MoveNext() { return true; }
public int Current { get { return value++; } }
}
public FooEnumerator GetEnumerator() {
return new FooEnumerator();
}
static void Main() {
foreach (int x in new Foo()) {
Console.WriteLine(x);
if (x >= 100) break;
}
foreach (int x in (dynamic)new Foo()) { // :)
Console.WriteLine(x);
if (x >= 100) break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我期望迭代 …
我有一个有趣的问题:给定一个IEnumerable<string>,是否有可能IEnumerable<IEnumerable<string>>在一次传递中产生一组相同的相邻字符串?
让我解释.
1.基本说明性样本:
考虑以下IEnumerable<string>(伪表示):
{"a","b","b","b","c","c","d"}
Run Code Online (Sandbox Code Playgroud)
如何获得一个IEnumerable<IEnumerable<string>>会产生某种形式的东西:
{ // IEnumerable<IEnumerable<string>>
{"a"}, // IEnumerable<string>
{"b","b","b"}, // IEnumerable<string>
{"c","c"}, // IEnumerable<string>
{"d"} // IEnumerable<string>
}
Run Code Online (Sandbox Code Playgroud)
方法原型将是:
public IEnumerable<IEnumerable<string>> Group(IEnumerable<string> items)
{
// todo
}
Run Code Online (Sandbox Code Playgroud)
但它也可能是:
public void Group(IEnumerable<string> items, Action<IEnumerable<string>> action)
{
// todo
}
Run Code Online (Sandbox Code Playgroud)
...... action每个子序列都会被调用.
2.更复杂的样本
好的,第一个样本非常简单,只是为了使高级意图清晰.
现在假设我们正在处理IEnumerable<Anything>,在这里Anything定义的类型如下:
public class Anything
{
public string Key {get;set;}
public double Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我们现在想要生成基于Key的子序列(Anything将具有相同键的每个连续组分组)以便稍后使用它们以便按组计算总值:
public void Compute(IEnumerable<Anything> items) …Run Code Online (Sandbox Code Playgroud)