日期:2014-05-18  浏览次数:20856 次

反射遇到的小问题,高手来看看!
C# code
<%@ Page Language="C#" %>

<script runat="server">

    public void Page_Load(object sender, EventArgs e)
    {
        System.Collections.Generic.List<string> source = new System.Collections.Generic.List<string> { "A", "B", "C", "D", "E" };
        foreach (object data in source)
        {
            Type type = data.GetType();
            foreach (System.Reflection.PropertyInfo property in type.GetProperties())
            {
                object propertyValue = property.GetValue(data, null);
                string value = (propertyValue == null) ? string.Empty : propertyValue.ToString();
                Response.Write(property.Name + " = " + value + ",");
            }
            Response.Write("<br />");
        }
    }
</script>


asp.net的,麻烦您运行下,
会报: 参数计数不匹配。
……
异常详细信息: System.Reflection.TargetParameterCountException: 参数计数不匹配。
到发帖为止有那么点明白了,但还是不很清楚为什么会出现这样的异常!?

------解决方案--------------------
.Net跟C#不一样
C#里有属性和索引的概念,但是.Net里统称为属性
所以你调用GetProperties方法会检索到索引,即:
string s="Hello";
s[i]//会检索到该索引
显然,索引是有参数的,而你统一用:
property.GetValue(data, null);
你用null表示没有参数,于是会提示参数计数不匹配
------解决方案--------------------
因为string里面有个属性是chars
这个需要index参数的
你可以参考下http://msdn.microsoft.com/en-us/library/b05d59ty.aspx