当前位置:  开发笔记 > 编程语言 > 正文

C#反射索引属性

如何解决《C#反射索引属性》经验,为你挑选了3个好方法。

我正在使用反射编写克隆方法.如何使用反射检测属性是索引属性?例如:

public string[] Items
{
   get;
   set;
}

我的方法到目前为止:

public static T Clone(T from, List propertiesToIgnore) where T : new()
{
    T to = new T();

    Type myType = from.GetType();

    PropertyInfo[] myProperties = myType.GetProperties();

    for (int i = 0; i < myProperties.Length; i++)
    {
        if (myProperties[i].CanWrite && !propertiesToIgnore.Contains(myProperties[i].Name))
        {
            myProperties[i].SetValue(to,myProperties[i].GetValue(from,null),null);
        }
    }

    return to;
}

FlySwat.. 48

if (propertyInfo.GetIndexParameters().Length > 0)
{
    // Property is an indexer
}


小智.. 20

对不起,可是

public string[] Items { get; set; }

不是索引属性,它只是一个数组类型的!但是以下是:

public string this[int index]
{
    get { ... }
    set { ... }
}

好的,但是如何通过反射找到它呢? (3认同)


Jeromy Irvin.. 9

你想要的是GetIndexParameters()方法.如果它返回的数组有多于0个项,则表示它是一个索引属性.

有关更多详细信息,请参阅MSDN文档.



1> FlySwat..:
if (propertyInfo.GetIndexParameters().Length > 0)
{
    // Property is an indexer
}



2> 小智..:

对不起,可是

public string[] Items { get; set; }

不是索引属性,它只是一个数组类型的!但是以下是:

public string this[int index]
{
    get { ... }
    set { ... }
}


好的,但是如何通过反射找到它呢?

3> Jeromy Irvin..:

你想要的是GetIndexParameters()方法.如果它返回的数组有多于0个项,则表示它是一个索引属性.

有关更多详细信息,请参阅MSDN文档.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有