gpt4 book ai didi

c# - PropertyInfo.GetValue() - 如何在 C# 中使用反射索引通用参数?

转载 作者:可可西里 更新时间:2023-11-01 08:06:05 26 4
gpt4 key购买 nike

这个(缩短的)代码..

for (int i = 0; i < count; i++)
{
object obj = propertyInfo.GetValue(Tcurrent, new object[] { i });
}

.. 抛出“TargetParameterCountException:参数计数不匹配”异常。

'propertyInfo' 的基础类型是一些 T 的集合。'count' 是集合中的项目数。我需要遍历集合并对 obj 执行操作。

感谢您的建议。

最佳答案

反射一次只在一个层面上起作用。

您正在尝试对属性进行索引,这是错误的。

相反,读取属性的值,以及您返回的对象,即您需要索引的对象。

这是一个例子:

using System;
using System.Collections.Generic;
using System.Reflection;

namespace DemoApp
{
public class TestClass
{
public List<Int32> Values { get; private set; }

public TestClass()
{
Values = new List<Int32>();
Values.Add(10);
}
}

class Program
{
static void Main()
{
TestClass tc = new TestClass();

PropertyInfo pi1 = tc.GetType().GetProperty("Values");
Object collection = pi1.GetValue(tc, null);

// note that there's no checking here that the object really
// is a collection and thus really has the attribute
String indexerName = ((DefaultMemberAttribute)collection.GetType()
.GetCustomAttributes(typeof(DefaultMemberAttribute),
true)[0]).MemberName;
PropertyInfo pi2 = collection.GetType().GetProperty(indexerName);
Object value = pi2.GetValue(collection, new Object[] { 0 });

Console.Out.WriteLine("tc.Values[0]: " + value);
Console.In.ReadLine();
}
}
}

关于c# - PropertyInfo.GetValue() - 如何在 C# 中使用反射索引通用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com