相关疑难解决方法(0)

C#4.0'动态'和foreach声明

在我发现之前的很长一段时间,新的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 foreach dynamic c#-4.0

11
推荐指数
1
解决办法
8497
查看次数

将连续的相同项分组:IEnumerable <T>到IEnumerable <IEnumerable <T >>

我有一个有趣的问题:给定一个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)

c# algorithm performance ienumerable

7
推荐指数
1
解决办法
1443
查看次数

标签 统计

ienumerable ×2

algorithm ×1

c# ×1

c#-4.0 ×1

dynamic ×1

foreach ×1

performance ×1