当前位置: 首页 > 编程语言 > C#

C#MultipleIndexer分享

时间:2023-04-10 14:06:48 C#

C#MultipleIndexer有没有可能有如下的:classC{publicFooFoos[inti]{...}publicBarBars[inti]{...}如果没有,我可以通过哪些方式实现这一目标?我知道我可以创建名为getFoo(inti)和getBar(inti)的函数,但我想用属性来实现。不在C#中,不。但是,您始终可以从属性返回一个集合,如下所示:publicIListFoos{get{return...;}}publicIListBars{get{return...;IList有一个索引器,因此您可以编写以下内容:Cwhatever=newC();FoomyFoo=whatever.Foos[13];关于“返回……;”行你可以返回任何实现IList的东西,但是你可以返回一个围绕你的收集设备的只读包装器,参见AsReadOnly()方法。这来自C#3.0规范“重载索引器允许一个类、结构或接口声明多个索引器,前提是它们的签名在该类、结构或接口中是唯一的。”publicclassMultiIndexer:List{publicstringthis[inti]{get{returnthis[i];}}publicstringthis[stringpValue]{get{//只是为了演示returnthis。查找(x=>x==pValue);尝试使用我的IndexProperty类在同一个类中启用多个索引器http://www.codeproject.com/Tips/319825/Multiple-Indexers-in-Csharp有一种方法..如果你定义了2种新类型和让编译器区分两个不同的签名...publicstructEmployeeId{publicintval;publicEmployeeId(intemployeeId){val=employeeId;}}publicstructHRId{publicintval;publicHRId(inthrId){val=hrId;}}publicclassEmployee{publicintEmployeeId;公共intHrId;//其他东西}publicclassEmployees:Collection{publicEmployeethis[EmployeeIdemployeeId]{get{foreach(Employeeempinthis)if(emp.EmployeeId==employeeId.val)returnemp;返回空值;}}publicEmployeethis[HRIdhrId]{get{foreach(Employeeempinthis)if(emp.HRId==hrId.val)returnemp;返回空值;}}//(或使用新的C#6+"expression-body"syntax)publicEmployeethis[EmployeeIdempId]=>this.FirstorDefault(e=>e.EmployeeId==empId.val;publicEmployeethis[HRIdhrId]=>this.FirstorDefault(e=>e.EmployeeId==hrId.val;}然后调用你,你必须写:EmployeeBob=MyEmployeeCollection[newEmployeeID(34)];如果你写了一个隐式转换运算符:publicstaticimplicitoperatorEmployeeID(intx){returnnewEmployeeID(x);}那么你甚至不必这样做就可以使用它,你可以这样写:以下操作:varmyClass=newMyClass();Console.WriteLine(myClass.Foos[0]);Console.WriteLine(myClass.Bars[0]);然后你需要在Foo和Bar类本身上定义索引器-即所有的Foo对象都放在Foos中,并使Foos成为支持直接索引的类型的实例使用成员属性演示数组(因为它们已经支持索引器):publicclassC{privatestring[]foos=newstring[]{"foo1","foo2","foo3"};privatestring[]bars=newstring[]{“bar1”,“bar2”,“bar3”};publicstring[]Foos{get{返回foos;}}publicstring[]Bars{get{returnbars;}}}会让你说:CmyThing=newC();Console.WriteLine(myThing.Foos[1]);Console.WriteLine(myThing.Bars[2]);C#没有返回类型重载。如果输入参数不同,可以定义多个索引器。不,你不能那样做。唯一可以根据返回类型具有不同签名的方法是转换运算符。索引器必须具有不同的输入参数类型才能编译。以上就是C#学习教程:多个C#索引器分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: