关于“ref”和“out”参数的定义已经有很多问题,但它们看起来像是糟糕的设计。在某些情况下,您认为ref是正确的解决方案吗?似乎您总能做一些更干净的事情。谁能给我举个例子,说明在什么情况下这是解决问题的“最佳”方法? 最佳答案 在我看来,ref在很大程度上弥补了声明新实用程序类型的困难以及将信息“添加到”现有信息的困难,这些是C#自从它起源于LINQ、泛型和匿名类型。所以不,我认为它不再有很多明确的用例。我认为这在很大程度上是该语言最初设计方式的遗留问题。我确实认为在需要从函数返回某种错误代码以及返回值的情况下它仍然有意义(如上所
非常简单。MSDN声明您可以使用ref,但不能使用部分方法。我很好奇为什么?据我了解,当代码被编译时,部分被合并,那么限制是什么?partial除了让代码文件更清晰、更有条理(即养眼)之外,还有更多的东西吗?引用:MSDNArticle-“部分方法可以有ref但不能有out参数。” 最佳答案 您必须考虑如果未实现分部方法会发生什么情况。然后发生的是所有对该方法的调用都被删除,就好像它们从未发生过一样。所以对于使用out的方法,它看起来像这样:streams;GetStream(outs);s.Write(...);并被编译成这样:s
在RhinoMocks中,您可以将模拟作为一揽子声明告知IgnoreArguments。在Moq中,您似乎必须为每个参数指定It.IsAny()。但是,这不适用于ref和out参数。如何在需要最小化内部服务调用以返回特定结果的地方测试以下方法:publicvoidMyMethod(){//DoStuffIListerrors=newList();varresult=_service.DoSomething(referrors,refparam1,param2);//Domorestuff}测试方法:publicvoidTestOfMyMethod(){//SetupvarmoqServ
我一直以为类类型的方法参数默认是作为引用参数传递的。显然情况并非总是如此。在C#中考虑这些单元测试(使用MSTest)。[TestClass]publicclassSandbox{privateclassTestRefClass{publicintTestInt{get;set;}}privatevoidTestDefaultMethod(TestRefClasstestClass){testClass.TestInt=1;}privatevoidTestAssignmentMethod(TestRefClasstestClass){testClass=newTestRefClass(
我有一个方法,它有一个返回多个记录的out参数。我想知道如何使用FakeItEasy模拟它。 最佳答案 您应该使用.AssignsOutAndRefParameters配置方法:[Test]publicvoidOutput_and_reference_parameters_can_be_configured(){varfake=A.Fake>();stringignored=null;A.CallTo(()=>fake.TryGetValue("test",outignored)).Returns(true).AssignsOutA
为什么禁止使用ref修饰符调用ExtensionMethod?这是可能的:publicstaticvoidChange(refTestClasstestClass,TestClasstestClass2){testClass=testClass2;}而这个不是:publicstaticvoidChangeWithExtensionMethod(thisrefTestClasstestClass,TestClasstestClass2){testClass=testClass2;}但为什么呢? 最佳答案 您必须明确指定ref和out。
如果不能,我可以将属性作为“out”或“ref”参数传递吗?为什么不呢?例如Personp=newPerson();...publicvoidTest(outp.Name); 最佳答案 很抱歉回答很简短,但是不行,C#语言规范不允许这样做。查看此answer到另一个问题,看看当你尝试时会发生什么。它还说明了为什么您不应该将该属性设置为公共(public)字段来绕过限制。希望对你有帮助编辑:你问为什么?您将变量传递给out或ref参数,您实际上传递的是变量的地址(或内存中的位置)。在函数内部,编译器知道变量的实际位置,并获取值并将值写
我有以下功能:publicstaticexternuintFILES_GetMemoryMapping([MarshalAs(UnmanagedType.LPStr)]stringpPathFile,outushortSize,[MarshalAs(UnmanagedType.LPStr)]stringMapName,outushortPacketSize,refMappingoMapping,outbytePagesPerSector);我想这样调用它:FILES_GetMemoryMapping(MapFile,outsize,MapName,outPacketSize,null,
我正在使用ref并且没有清楚地理解“它是像C/C++中的指针还是像C++中的引用?”为什么我问了你一时想的这么弱的问题?因为,当我阅读C#/.NET书籍、msdn或与C#开发人员交谈时,我会因以下原因而感到困惑:C#开发人员建议不要在函数的参数中使用ref,例如...(refTypesomeObject)对他们来说闻起来不好,他们建议...(TypesomeObject),我真的不清楚这个建议。我听到的原因:最好使用对象的副本,然后将其用作返回值,不要通过引用破坏内存等......我经常听到有关DB连接对象的解释。根据我的普通C/C++经验,我真的不明白为什么在C#中使用引用是一件坏事
我今天早些时候试过这个:publicinterfaceIFoo{IEnumerableGetItems_A(refintsomethingElse);IEnumerableGetItems_B(refintsomethingElse);}publicclassBar:IFoo{publicIEnumerableGetItems_A(refintsomethingElse){//Ok...}publicIEnumerableGetItems_B(refintsomethingElse){yieldreturn7;//CS1623:Iteratorscannothavereforoutpa