加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将函数实现为[]

发布时间:2020-12-16 00:11:38 所属栏目:百科 来源:网络整理
导读:我有一个真正的函数数组,但是我想将它用作数组.我知道我可以写这些 int var { get{return v2;} }public int this[int v] { get { return realArray[v]; } 但是我如何实现一个像数组一样的函数?我想做点什么 public int pal[int i] { get { return i*2; } }
我有一个真正的函数数组,但是我想将它用作数组.我知道我可以写这些

int var { get{return v2;} }
public int this[int v] { get { return realArray[v]; }

但是我如何实现一个像数组一样的函数?我想做点什么

public int pal[int i] { get { return i*2; } }

但是这会产生编译错误

error CS0650: Bad array declarator: To declare a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field,use the fixed keyword before the field type.
error CS0270: Array size cannot be specified in a variable declaration (try initializing with a 'new' expression)

解决方法

在C#中,声明参数化属性的唯一可能方法是索引器.但是,您可以通过创建一个提供索引器的类并向您的类添加该类型的属性来模拟类似的东西:

class ParameterizedProperty<TProperty,TIndex> {
     private Func<TIndex,TProperty> getter;
     private Action<TIndex,TProperty> setter;
     public ParameterizedProperty(Func<TIndex,TProperty> getter,Action<TIndex,TProperty> setter) {
        this.getter = getter;
        this.setter = setter;
     }
     public TProperty this[TIndex index] {
        get { return getter(index); }
        set { setter(index,value); }
     }   
}

class MyType {
    public MyType() {
        Prop = new ParameterizedProperty<string,int>(getProp,setProp);
    }
    public ParameterizedProperty<string,int> Prop { get; private set; }
    private string getProp(int index) {
        // return the stuff
    }
    private void setProp(int index,string value) {
        // set the stuff
    }
}

MyType test = new MyType();
test.Prop[0] = "Hello";
string x = test.Prop[0];

您可以根据需要从类中删除getter或setter,将该想法扩展为只读和只写属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读