Я хочу itterate над индексированным свойством, что я только иметь доступ к с помощью отражения,перебор индексированного свойства (Отражение)
, но (и я говорю это с полным осознанием того, что есть, вероятно, ошеломляюще простой ответ, MSDN/Google fail = /) Я не могу найти/подумать об этом, не увеличивая счетчик по PropertyInfo.GetValue(prop, counter)
до тех пор, пока не будет выброшен TargetInvocationException
.
ала:
foreach (PropertyInfo prop in obj.GetType().GetProperties())
{
if (prop.GetIndexParameters().Length > 0)
{
// get an integer count value, by incrementing a counter until the exception is thrown
int count = 0;
while (true)
{
try
{
prop.GetValue(obj, new object[] { count });
count++;
}
catch (TargetInvocationException) { break; }
}
for (int i = 0; i < count; i++)
{
// process the items value
process(prop.GetValue(obj, new object[] { i }));
}
}
}
сейчас, есть некоторые проблемы с этим ... очень некрасиво .. решение ..
что, если это многомерный или не индексируются целыми числами, например .. .
heres тестовый код, который я использую, чтобы попытаться заставить его работать, если кому-то это нужно. Если кому-то интересно, я создаю пользовательскую систему кеширования и .Equals не режут ее.
static void Main()
{
object str = new String(("Hello, World").ToArray());
process(str);
Console.ReadKey();
}
static void process(object obj)
{
Type type = obj.GetType();
PropertyInfo[] properties = type.GetProperties();
// if this obj has sub properties, apply this process to those rather than this.
if (properties.Length > 0)
{
foreach (PropertyInfo prop in properties)
{
// if it's an indexed type, run for each
if (prop.GetIndexParameters().Length > 0)
{
// get an integer count value
// issues, what if it's not an integer index (Dictionary?), what if it's multi-dimensional?
// just need to be able to iterate through each value in the indexed property
int count = 0;
while (true)
{
try
{
prop.GetValue(obj, new object[] { count });
count++;
}
catch (TargetInvocationException) { break; }
}
for (int i = 0; i < count; i++)
{
process(prop.GetValue(obj, new object[] { i }));
}
}
else
{
// is normal type so.
process(prop.GetValue(obj, null));
}
}
}
else
{
// process to be applied to each property
Console.WriteLine("Property Value: {0}", obj.ToString());
}
}
Что цель `объекта ул = новая строка (("Hello, World"). ToArray())`? – 2010-11-24 15:24:16
просто переменная примера, передаваемая моей функции ... пыталась использовать различные способы определения строки/String и оставила ее на некотором неудобном ... `object str =" Hello, World! ";` работает так же хорошо. – 2010-11-24 15:35:10
Что делать, если у меня есть клавиши STRING, а не целое число? Я не знаю их имен. Как их найти и использовать? – Alexander 2017-12-07 20:51:47