我正在尝试编写一个方法,该方法充当setter并在分配的值之外采用一些额外的参数。愚蠢的例子:classWordGeneratordef[]=(letter,position,allowed)puts"#{letter}#{allowed?'now':'nolonger'}allowedat#{position}"enddefallow=(letter,position,allowed)#...endend将它写成索引器是可行的,我可以这样调用它:gen=WordGenerator.newgen['a',1]=true#orexplicitly:gen.[]=('a',1,true)但
我来自C++,在那里很容易做这样的事情:templatevoidSwap(T&a,T&b){Ttemp=a;a=b;b=temp;}然后用它来交换容器中的值:std::vectorsomeInts;someInts.push_back(1);someInts.push_back(2);Swap(someInts[0],someInts[1]);但是,在尝试用C#做同样的事情时voidSwap(refTa,refTb){Ttemp=a;a=b;b=temp;}我收到错误“属性或索引器不能作为out或ref参数传递”为什么会这样,我该如何克服?非常感谢 最佳答案
我注意到数组有SetValue方法,当您只能使用索引器时,这似乎有点不合适。SetValue有什么特殊用途吗?MSDN文章似乎并没有说明SetValue的用途,只是说明了如何使用它。就速度而言,使用哪种方法效率更高? 最佳答案 有时你所拥有的数组只是一个数组。Array类没有索引器,因此在其上设置/获取元素值的最佳方法是通过GetValue和SetValue方法。例如:privatevoidM(Arrayarray){array[0]=5;// 关于c#-使用数组的SetValue方法与
如标题所述,我想在抽象类中声明一个索引器objectthis[intindex]作为抽象成员。这有可能吗?是否也可以在接口(interface)中声明它? 最佳答案 Ofcourse:publicabstractclassClassWithAbstractIndexer{publicabstractintthis[intindex]{get;set;}} 关于c#-是否有可能将C#中的索引器声明为抽象成员?,我们在StackOverflow上找到一个类似的问题:
我试图做这样的事情,但这不起作用:classGarage{privateListcars=newList();publicCarthis[inti]{get{returncars[i];}}//...}Garageg=newGarage();//getCS1579-noGetEnumeratordefinitionforeach(Carcing){//...}由于MSDN说索引器可能会过载,所以我决定在这里请教专家。如何重载索引器配合foreach循环? 最佳答案 foreach与indexers无关.您需要声明一个GetEnume
我刚刚编写了一个小示例来检查C#优化器在索引器情况下的行为。这个例子很简单——我只是将一个数组包装在一个类中并尝试填充它的值:一次是直接填充,一次是通过索引器(它在内部访问数据的方式与直接解决方案完全相同)。publicclassArrayWrapper{publicArrayWrapper(intnewWidth,intnewHeight){width=newWidth;height=newHeight;data=newint[width*height];}publicintthis[intx,inty]{get{returndata[y*width+x];}set{data[y*w
在问题的最后:UsingMoqtosetindexersinC#,有人强调了我也遇到的问题。但他们没有找到解决方案。具体来说,我正在尝试使用通用It.IsAny作为键的匹配器并通过It.IsAny设置值.当通过索引访问并设置值时,它从不匹配并且不访问我的回调方法。所以我的单元测试失败了。varstateTable=newHashTable;varhttpSession=newMock();//worksviahttpSession.Add(key,value);httpSession.Setup(x=>x.Add(It.IsAny(),It.IsAny())).Callback((st
在阅读代码时偶然发现了这个我以前从未见过的片段:publicSomeClass{publicsomeInterfacethis[StringstrParameter]{get{returnSomeInternalMethod(strParameter);}}}好像是这样调用的:SomeClass_someClass=newSomeClass();SomeInterfacereturnedValue=_someClass["someString"];我感兴趣的是这个函数适用于什么地方,或者用这种风格编写的意图是什么。例如,为什么这比简单地调用函数更受欢迎? 最
是否有可能有类似下面的东西:classC{publicFooFoos[inti]{...}publicBarBars[inti]{...}}如果没有,那么我可以通过哪些方式实现这一目标?我知道我可以创建名为getFoo(inti)和getBar(inti)的函数,但我希望通过属性来实现。 最佳答案 不在C#中,不。但是,您始终可以从属性返回集合,如下所示:publicIListFoos{get{return...;}}publicIListBars{get{return...;}}IList有一个索引器,所以你可以这样写:Cwhat
我想更多地使用索引器,但我不确定何时使用它们。我在网上找到的所有示例都是使用MyClass和IndexerClass类的示例。在有学生和教师的学校系统中,每个教师都有一个他们负责的学生列表-在这种情况下是否需要索引器?为简单起见:每个学生只能属于一个教师。 最佳答案 Indexer是一个高度特化的属性,它允许类(或结构)的实例像数组一样被索引(属性可以是静态的,但索引器不能)。为什么要使用索引器:类本身就是一个数据结构,而不是一个新的数据结构。简化语法——语法糖何时使用:如果您的类需要其实例的列表(/数组)(示例1)如果您的类表示与