枚举string的属性时的TargetParameterCountException

Dav*_*vid 16 .net c# reflection

我正在使用以下代码输出属性值:

string output = String.Empty;
string stringy = "stringy";
int inty = 4;
Foo spong = new Foo() {Name = "spong", NumberOfHams = 8};
foreach (PropertyInfo propertyInfo in stringy.GetType().GetProperties())
{
  if (propertyInfo.CanRead) output += propertyInfo.GetValue(stringy, null);
}
Run Code Online (Sandbox Code Playgroud)

如果我为该类型intFoo复杂类型运行此代码,它可以正常工作.但是如果我为它运行string(如图所示),我在foreach循环内的行上得到以下错误:

System.Reflection.TargetParameterCountException:参数计数不匹配.

有谁知道这意味着什么以及如何避免它?

如果有人问'为什么你要通过字符串的属性进行枚举',最终我希望创建一个泛型类,它将输出传递给它的任何类型的属性(可能是一个字符串......).

Jam*_*mie 24

在这种情况下,字符串的一个属性是用于在指定位置返回字符的索引器.因此,当您尝试时GetValue,该方法需要索引但不会收到索引,从而导致异常.

要检查哪些属性需要索引,您可以调用GetIndexParametersPropertyInfo对象.它返回一个数组ParameterInfo,但你可以检查该数组的长度(如果没有参数,它将为零)

  • 在PropertyInfo对象上调用GetIndexParameters.它返回一个ParameterInfo数组,但你可以只检查该数组的长度(如果没有参数,它将为零) (8认同)

InB*_*een 5

System.String有一个索引属性,返回char指定位置的 。索引属性需要一个参数(在本例中为索引),因此例外。