草庐IT

yields_lvalue

全部标签

c# - 在 C# 中使用 yield

我对c#中的yield关键字有一个模糊的理解,但我还没有看到需要在我的代码中使用它。这可能是因为对它缺乏了解。那么,yield有哪些典型的良好用法? 最佳答案 yield只是使实现枚举器变得非常简单。所以如果你想写一个返回IEnumerable的方法它使您不必创建枚举器类-您只需yield一次一个结果,编译器会处理隐藏的细节。一个方便的例子是编写一个“无限枚举器”,调用者可以根据需要多次调用它。这是一个生成无限斐波那契数列的示例:http://chrisfulstow.com/fibonacci-numbers-iterator-w

c# - Parallel.Foreach + yield 返回?

我想像这样使用并行循环处理一些东西:publicvoidFillLogs(IEnumerablecomputers){Parallel.ForEach(computers,cpt=>{cpt.Logs=cpt.GetRawLogs().ToList();});}好的,它工作正常。但是,如果我希望FillLogs方法返回一个IEnumerable怎么办?publicIEnumerableFillLogs(IEnumerablecomputers){Parallel.ForEach(computers,cpt=>{cpt.Logs=cpt.GetRawLogs().ToList();yie

c# - Scala 有等同于 C# 的 yield 吗?

我是Scala的新手,据我了解,Scala中的yield与C#中的yield不同,它更像是select。Scala有类似C#的yield吗?C#的产量很大,因为它使编写迭代器变得非常容易。更新:这是我希望能够在Scala中实现的来自C#的伪代码示例:publicclassGraph{publicIEnumerableBreadthFirstIterator(){ListcurrentLevel=newList();currentLevel.add(_root);while(currentLevel.count>0){ListnextLevel=newList();foreach(var

c# - Thread.Sleep 或 Thread.Yield

我有一个方法,它使用后台工作程序轮询DLL以获取如下所示的状态:vartimeout=DateTime.Now.AddSeconds(3);while(System.Status!=Status.Complete//ourstatusisnotcomplete&&DateTime.Now查看我的CPU%时,yield()和spinwait()导致我的应用在我的PC上使用率高达50%。使用Sleep(1),我的CPU%保持在6%。有人告诉我应该选择Thread.Yield(),但是CPU%的峰值让我很困扰。像这样的最佳做法是什么? 最佳答案

c# - 当可以在 lambda 中使用 await 时,为什么不能在 lambda 中使用 yield?

AccordingtoEricLippert,anonymousiteratorswerenotaddedtothelanguagebecauseitwouldbeoverlycomplicatedtoimplementit.这对我来说没问题,直到他们继续实现匿名异步方法后我才感到困扰。编译器必须为异步方法做同样的事情,因为它必须为迭代器做同样的事情(将它们转换为状态机),所以我很困惑为什么匿名迭代器也不允许,而匿名异步方法是允许的。有人可以阐明这一点吗? 最佳答案 AccordingtoEricLippert,anonymousi

c# - C# 中的 yield return 是线程安全的吗?

我有以下代码:privateDictionaryitems=newDictionary;publicIEnumerableKeys{get{foreach(objectkeyinitems.Keys){yieldreturnkey;}}}这是线程安全的吗?如果不是,我是否必须在循环或yieldreturn周围放置一个lock?我的意思是:线程1访问Keys属性,而线程2将一个项目添加到基础字典中。添加Thread2会影响Thread1吗? 最佳答案 线程安全到底是什么意思?无论是否在同一个线程中,您当然不应该在迭代字典时更改字典。如

c# - 有人可以揭开 yield 关键字的神秘面纱吗?

我已经看到yield关键字在StackOverflow和博客上被大量使用。我不使用LINQ.有人可以解释yield关键字吗?我知道存在类似的问题。但没有人真正用通俗易懂的语言解释它的用途。 最佳答案 目前对此(我所见)的最好解释是JonSkeet的书——而且那一章是免费的!第6章,C#inDepth.我可以在这里添加所有未涵盖的内容。然后买书;你将成为更好的C#程序员。问:为什么我没有在这里写一个更长的答案(从评论中转述);简单的。正如EricLippert所观察到的(here),yield构造(及其背后的魔力)是C#编译器中最复杂

c# - yield return 仅适用于 IEnumerable<T>?

我可以使用yieldreturn吗?当返回类型是IGrouping时或IDictionary? 最佳答案 yieldreturn恰好适用于4种情况:IEnumerableIEnumerableIEnumeratorIEnumerator这是因为它要在内部建立一个状态机;字典(等)用这个是不可能的。你当然可以只return一个合适的类型。 关于c#-yieldreturn仅适用于IEnumerable?,我们在StackOverflow上找到一个类似的问题: h

c# - C# Yield 会释放锁吗?

我有以下方法:publicstaticIEnumerable>GetRowsIter(thisSqlCeResultSetresultSet){//Makesurewedon'tmultithreadthedatabase.lock(Database){if(resultSet.HasRows){resultSet.Read();do{varresultList=newDictionary();for(inti=0;i我刚刚添加了lock(Database)来尝试摆脱一些并发问题。不过,我很好奇,yieldreturn是否会释放对Database的锁定,然后在下一次迭代时重新锁定?或者

c# - yield break有什么用?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Whatdoes“yieldbreak;”doinC#?谁能看出使用“break”或“return”无法实现的“yieldbreak”语句的用途。这种说法似乎完全没有用。更重要的是,如果没有这个语句,“yieldreturnX”语句可以简化为“yieldX”,这样可读性更高。我错过了什么?