我正在阅读C#7中新的输出变量功能here.我有两个问题:它说Weallow"discards"asoutparametersaswell,intheformofa_,toletyouignoreoutparametersyoudon’tcareabout:p.GetCoordinates(outvarx,out_);//Ionlycareaboutx问:我想这只是一个信息,而不是C#7的新功能,因为我们也可以在C#7.0之前的版本中这样做:var_;if(Int.TryParse(str,out_))...还是我在这里遗漏了什么?当我按照同一博客中提到的那样操作时,我的代码会出错:~
我收到上述错误并且无法解决。我用谷歌搜索了一下,但无法摆脱它。场景:我有一个BudgetAllocate类,它的属性是budget,它是double类型。在我的dataAccessLayer中,在我的一个类(class)中,我正在尝试这样做:double.TryParse(objReader[i].ToString(),outbd.Budget);这是抛出这个错误:Propertyorindexermaynotbepassedasanoutorrefparameteratcompiletime.我什至试过这个:double.TryParse(objReader[i].ToString(
假设我有:publicclassBob{publicintValue{get;set;}}我想将Value成员作为输出参数传递,例如Int32.TryParse("123",outbob.Value);但是我得到一个编译错误,“‘out’参数没有被归类为一个变量。”有没有办法实现这个,或者我是否必须提取一个变量,à啦:intvalue;Int32.TryParse("123",outvalue);bob.Value=value; 最佳答案 您必须显式使用字段和“普通”属性而不是自动实现的属性:publicclassBob{priva
考虑一个返回两个值的函数。我们可以这样写://Usingout:stringMyFunction(stringinput,outintcount)//UsingTupleclass:TupleMyFunction(stringinput)//Usingstruct:MyStructMyFunction(stringinput)哪个是最佳实践,为什么? 最佳答案 它们各有优缺点。Out参数快速且便宜,但需要您传入一个变量,并依赖于变异。在LINQ中正确使用输出参数几乎是不可能的。元组会产生收集压力1并且不会self记录。“Item1”
我正在打电话:myResult=MakeMyCall(inputParams,outmessages);但我实际上并不关心这些消息。如果它是一个我不关心的输入参数,我只是传入一个空值。如果这是我不关心的返回,我就把它关掉。有没有办法用out做类似的事情,或者我是否需要声明一个我将忽略的变量? 最佳答案 从C#7.0开始,可以避免预先声明和忽略参数。publicvoidPrintCoordinates(Pointp){p.GetCoordinates(outintx,outinty);WriteLine($"({x},{y})");}
C#6.0中的一项新功能允许在TryParse方法中声明变量。我有一些代码:strings="Hello";if(int.TryParse(s,outvarresult)){}但是我收到编译错误:我做错了什么?P.S.:项目设置中设置了C#6.0和.NETframework4.6。 最佳答案 AnewfeatureinC#6.0allowstodeclarevariableinsideTryParsemethod.声明表达式从C#6.0中删除,并没有在最终版本中发布。你目前不能这样做。ThereisaproposalforitonG
上下文:我们有一些用户报告我们的网络应用程序中的文件上传功能存在问题。它只是偶尔发生并且没有任何特殊模式。很长一段时间以来,我们一直在努力解决这个问题,在我们认为可能有帮助的任何地方添加调试信息,抓取日志等,但我们一直无法重现或解决这个问题。问题:我现在正尝试通过使用MSTest和WatiN重复本应失败多次(数百次)的操作来重现此操作。只是为了了解测试在循环中进行了多远,我想打印如下内容:Console.WriteLine(String.Format("Uploadedfile,attempt{0}of{1}",i,maxUploads));但这不会出现在“输出”窗口中。现在我知道您将
我想写一个带有out参数的异步方法,如下所示:publicasyncvoidMethod1(){intop;intresult=awaitGetDataTaskAsync(outop);}如何在GetDataTaskAsync中执行此操作? 最佳答案 您不能使用带有ref或out参数的异步方法。LucianWischik解释了为什么在这个MSDN线程上这是不可能的:http://social.msdn.microsoft.com/Forums/en-US/d2f48a52-e35a-4948-844d-828a1a6deb74/wh
之间有什么区别?和?例如:publicinterfaceIExample{...}对比publicinterfaceIExample{...} 最佳答案 out泛型中的关键字用于表示接口(interface)中的类型T是协变的。参见Covarianceandcontravariance了解详情。经典的例子是IEnumerable.自IEnumerable是协变的,您可以执行以下操作:IEnumerablestrings=newList();IEnumerableobjects=strings;如果这不是协变的,上面的第二行将失败,即
前几天有人问我什么时候应该使用参数关键字out而不是ref。虽然我(我认为)理解ref和out关键字(一直是askedbefore)之间的区别,但最好的解释似乎是ref==in和out,我应该始终使用out而不是的一些(假设或代码)示例引用。既然ref更通用,为什么还要使用out?它只是语法糖吗? 最佳答案 除非你需要ref,否则你应该使用out。当数据需要编码时,它会产生很大的不同,例如到另一个过程,这可能是昂贵的。因此,您希望避免在方法未使用初始值时编码初始值。除此之外,它还向声明或调用的读者显示初始值是相关的(并可能保留)还是