草庐IT

yields_lvalue

全部标签

C# IEnumerator/yield 结构可能不好?

背景:我有一堆从数据库中获取的字符串,我想返回它们。传统上,它会是这样的:publicListGetStuff(stringconnectionString){ListcategoryList=newList();using(SqlConnectionsqlConnection=newSqlConnection(connectionString)){stringcommandText="GetStuff";using(SqlCommandsqlCommand=newSqlCommand(commandText,sqlConnection)){sqlCommand.CommandType

c# - 为什么 Thread.CurrentPrincipal 需要 "await Task.Yield()"才能正确流动?

以下代码已添加到新创建的VisualStudio2012.NET4.5WebAPI项目中。我正在尝试同时分配HttpContext.Current.User和Thread.CurrentPrincipal在异步方法中。Thread.CurrentPrincipal的赋值除非awaitTask.Yield();否则流程不正确(或任何其他异步)被执行(将true传递给AuthenticateAsync()将导致成功)。这是为什么?usingSystem.Security.Principal;usingSystem.Threading.Tasks;usingSystem.Web.Http;n

c# - 一些帮助理解 "yield"

在我不断寻求减少吸取的过程中,我试图理解“yield”声明,但我一直遇到同样的错误。Thebodyof[someMethod]cannotbeaniteratorblockbecause'System.Collections.Generic.List'isnotaniteratorinterfacetype.这是我卡住的代码:foreach(XElementheaderinheadersXml.Root.Elements()){yieldreturn(ParseHeader(header));}我做错了什么?我不能在迭代器中使用yield吗?那有什么意义呢?在这个例子中它说List不是

c# - yield break 是否等同于从返回 IEnumerable<T> 的方法返回 Enumerable<T>.Empty

这两种方法对我来说似乎是一样的publicIEnumerableGetNothing(){returnEnumerable.Empty();}publicIEnumerableGetLessThanNothing(){yieldbreak;}我在测试场景中分析了每一个,我没有发现速度上有什么明显的差异,但是yieldbreak版本稍微快一些。是否有理由使用一个而不是另一个?一个比另一个更容易阅读吗?是否存在对调用者重要的行为差异? 最佳答案 如果你打算总是返回一个空的枚举然后使用Enumerable.Empty()语法更具声明性恕我

c# - Task.Yield - 实际用途?

我一直在阅读Task.Yield,作为一名Javascript开发人员,我可以说它的工作与setTimeout(function(){...},0);完全相同。在让主单线程处理其他东西方面又名:"don'ttakeallthepower,releasefromtimetime-sootherswouldhavesometoo..."在js中,它在长循环中特别有效。(不要让浏览器卡住...)但是我看到了这个例子here:publicstaticasyncTaskFindSeriesSum(inti1){intsum=0;for(inti=0;i作为JS程序员,我可以理解他们在这里做了什么

C#: yield 返回范围/集合

我经常使用yieldreturn关键字,但是当我想将范围添加到IEnumerable时,我发现缺少它。这是我想做的一个简单示例:IEnumerableSomeRecursiveMethod(){//somecode//...yieldreturnSomeRecursiveMethod();}这自然会导致错误,可以通过执行一个简单的循环来解决。有一个更好的方法吗?循环感觉有点笨拙。 最佳答案 不,恐怕没有。F#确实通过yield!支持这一点,但在C#中没有等效项-您基本上必须使用循环。对不起...我感觉到你的痛苦。我在oneofmyE

c# - yield 返回多少?

我发现自己经常对IEnumerables进行foreach-ing,以便返回每个结果。有没有办法压缩这样的东西foreach(varsubSelectorinsubSelectors){foreach(varnodeinFindSingle(context,subSelector))yieldreturnnode;}要删除内部foreach? 最佳答案 这是C#不支持的有点经常请求的功能。有关详细信息,请参阅此连接项目:http://connect.microsoft.com/VisualStudio/feedback/detail

c# - 在 C# 中使用 yield return 迭代器的目的/优势是什么?

我见过的所有在C#方法中使用yieldreturnx;的示例都可以通过返回整个列表以相同的方式完成。在这些情况下,使用yieldreturn语法与返回列表相比有什么好处或优势吗?另外,yieldreturn在什么情况下不能只返回完整的列表? 最佳答案 但是如果您自己构建一个集合呢?通常,迭代器可用于延迟生成对象序列。例如Enumerable.Range方法内部没有任何类型的集合。它只会按需生成下一个数字。这种使用状态机的惰性序列生成有很多用途。其中大部分包含在函数式编程概念中。在我看来,如果您只是将迭代器视为一种枚举集合的方式(它只

c# - 有没有可能到 "await yield return DoSomethingAsync()"

常规迭代器block(即“yieldreturn”)是否与“async”和“await”不兼容?这很好地说明了我要做什么:asyncTask>Method(String[]Strs){//Iwanttocomposethesingleresulttothefinalresult,soIusetheSelectManyvarfinalResult=UrlStrings.SelectMany(link=>//ihaveanUrlstringCollectionawaitUrlString.DownLoadHtmlAsync()//downloadsingleresult;DownLoadH

c# - 什么时候不使用 yield (return)

这个问题在这里已经有了答案:关闭12年前。Thisquestionalreadyhasananswerhere:Isthereeverareasontonotuse'yieldreturn'whenreturninganIEnumerable?关于yieldreturn的好处,SO上有几个有用的问题。例如,CansomeonedemystifytheyieldkeywordInterestinguseofthec#yieldkeywordWhatistheyieldkeyword我正在寻找有关何时不使用yield返回的想法。例如,如果我希望需要返回集合中的所有项目,似乎yield不会有