Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:Enumerable.Zip()交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是_C#_Algorithm_Linq_Ienumerable_Enumerator - Fatal编程技术网

C# 函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:Enumerable.Zip()交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是

C# 函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:Enumerable.Zip()交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是,c#,algorithm,linq,ienumerable,enumerator,C#,Algorithm,Linq,Ienumerable,Enumerator,函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:Enumerable.Zip()交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是正确的。但是,我确实需要将对象作为列表而不是单独的对象(批处理)使用。如果您无法控制这两个消费函数,那么如何使它们在每次输入后产生返回值?@BlueRaja正是我答案的重点,这一点被否决了。很有趣。这将把IEnumerable投影到IEnume


函数或两个使用者函数。我正在努力使它更漂亮。这取决于这样一个事实:
Enumerable.Zip()
交替调用每个序列的枚举数,显然第二个枚举数在第一个之前被调用,这意味着这个解决方案可能并不总是有效,或者在未来版本的.Net.Net中可能会突然停止工作,这是正确的。但是,我确实需要将对象作为列表而不是单独的对象(批处理)使用。如果您无法控制这两个消费函数,那么如何使它们在每次输入后
产生返回值
?@BlueRaja正是我答案的重点,这一点被否决了。很有趣。这将把
IEnumerable
投影到
IEnumerable
IEnumerable
或者我必须修改
DoSomethingWithChicken/Goat
才能使用吗?如果你想在类似流的模型中这样做(即不创建任何其他集合来积累项目),你需要编写一些函数来分别接受每个元素,但实际上,Rx中有一些函数可以将可观察值转换为可枚举值,后者正是我感兴趣的。我要下载Rx,看看我能用它做些什么,我会重新考虑这个问题,如果它能做到的话,我会改变被接受的答案。
struct AnimalCount
{
    int Chickens;
    int Goats;
}

IEnumerable<AnimalCount> FarmsInEachPen()
{
    ....
    yield new AnimalCount(x, y);
    ....
}
ConsumeChicken(IEnumerable<int>);
ConsumeGoat(IEnumerable<int>);
ConsumeChicken(FarmsInEachPen().Select(x => x.Chickens));
ConsumeGoats(FarmsInEachPen().Select(x => x.Goats));
foreach(var animal in animals)
{
    ConsomeChicken(animal.Chickens);
    ConsomeGoat(animal.Goats);
}
from a in animals
group a by 0 into g
select new 
{
    TotalChickens = g.Sum(x => x.Chickens), 
    TotalGoats = g.Sum(x => x.Goats)
}
private static IEnumerable<object> ConsumeChickens(IEnumerable<int> xList)
{
    foreach (var x in xList)
    {
        Console.WriteLine("X: " + x);
        yield return null;
    }
}

private static IEnumerable<object> ConsumeGoats(IEnumerable<int> yList)
{
    foreach (var y in yList)
    {
        Console.WriteLine("Y: " + y);
        yield return null;
    }
}

private static IEnumerable<int> SelectHelper(IEnumerator<AnimalCount> enumerator, int i)
{
    bool c = i != 0 || enumerator.MoveNext();
    while (c)
    {
        if (i == 0)
        {
            yield return enumerator.Current.Chickens;
            c = enumerator.MoveNext();
        }
        else
        {
            yield return enumerator.Current.Goats;
        }
    }
}

private static void Main(string[] args)
{
    var enumerator = GetAnimals().GetEnumerator();

    var chickensList = ConsumeChickens(SelectHelper(enumerator, 0));
    var goatsList = ConsumeGoats(SelectHelper(enumerator, 1));

    var temp = chickensList.Zip(goatsList, (i, i1) => (object) null);
    temp.ToList();

    Console.WriteLine("Total iterations: " + iterations);
}
var observable = new Subject<Animals>()
observable.Do(x=> DoSomethingWithChicken(x. Chickens))
observable.Do(x=> DoSomethingWithGoat(x.Goats))

foreach(var item in FarmsInEachPen())
{
    observable.OnNext(item)
}