[英]How to check for indexed property?
So,I have a class object that uses an index property. 所以,我有一个使用index属性的类对象。 I loop through the properties of the object but I want to skip the index property itself.
我遍历对象的属性,但是我想跳过index属性本身。
Instead of checking if the property name is "Item" the default for an index property is there another way to check for this property in order to skip it? 不是检查属性名称是否为“ Item”,而是使用索引属性的默认值,而是通过另一种方法检查该属性以跳过该属性?
Here is my code: 这是我的代码:
The class with the index property. 具有index属性的类。
public class MyClass{
//Index Property
public object this[string propertyName]
{
get
{
return PropertyHelper.GetPropValue(this, propertyName);
}
set
{
if (PropertyHelper.GetPropType(this, propertyName) == typeof(Guid?))
{
PropertyHelper.SetPropValue(this, propertyName, Guid.Parse(value.ToString()));
}
else if (PropertyHelper.GetPropType(this, propertyName) == typeof(int))
{
PropertyHelper.SetPropValue(this, propertyName, int.Parse(value.ToString()));
}
else if (PropertyHelper.GetPropType(this, propertyName) == typeof(string))
{
PropertyHelper.SetPropValue(this, propertyName,value.ToString());
}
}
public Guid? Id { get; set; }
public int empId { get; set; }
public string morePropertiesLikeThis {get;set;}
}
//PropertyHelper Class // PropertyHelper类别
public static class PropertyHelper
{
public static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName).GetValue(src, null);
}
public static Type GetPropType(object src, string propName)
{
return src.GetType().GetProperty(propName).PropertyType;
}
public static void SetPropValue(object src, string propName, object value)
{
src.GetType().GetProperty(propName).SetValue(src, value, null);
}
}
Usage: 用法:
//Build Query String
string parameters = "?";
int r = 1;
foreach (PropertyInfo info in typeof (MyClass).GetProperties())
{
//I want to use some less prone to change, than text Item
if (info.Name == "Item")
{
continue;
}
var property = PropertyHelper.GetPropValue(conditions, info.Name);
if (property != null)
{
if (r > 1)
{
parameters += "&" + info.Name + "=" +
conditions.GetType().GetProperty(info.Name).GetValue(conditions, null);
}
else
{
parameters += info.Name + "=" +
conditions.GetType().GetProperty(info.Name).GetValue(conditions, null);
}
r++;
}
}
Just use PropertyInfo.GetIndexParameters
- if the array returned isn't empty, it's an indexer. 只需使用
PropertyInfo.GetIndexParameters
如果返回的数组不为空,则为索引器。
if (info.GetIndexParameters().Any())
{
continue;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.