C# Type.InvokeMember似乎不适用于short、int16或其他16位数字类型的类

C# Type.InvokeMember似乎不适用于short、int16或其他16位数字类型的类,c#,reflection,invokemember,C#,Reflection,Invokemember,运行时未找到方法“age”的异常,如果我将“age”的类型更改为int或其他32+数字类型,则该方法有效 InvokeMember是否不支持short、int16等类型。或者我可以改变另一种赋值方式 非常感谢您的帮助,您可以试试这个吗。这对我有用 var type = typeof(Test); var ins = Activator.CreateInstance(type); type.InvokeMember("name", BindingFlags.DeclaredOnly |

运行时未找到方法“age”的异常,如果我将“age”的类型更改为int或其他32+数字类型,则该方法有效

InvokeMember是否不支持short、int16等类型。或者我可以改变另一种赋值方式


非常感谢您的帮助,您可以试试这个吗。这对我有用

var type = typeof(Test);

var ins = Activator.CreateInstance(type);

type.InvokeMember("name", BindingFlags.DeclaredOnly |
                    BindingFlags.Public | BindingFlags.NonPublic |
                    BindingFlags.Instance | BindingFlags.SetProperty, null,   ins ,new object[] { "alibaba" });

type.InvokeMember("age", BindingFlags.DeclaredOnly |
                    BindingFlags.Public | BindingFlags.NonPublic |
                    BindingFlags.Instance | BindingFlags.SetProperty | BindingFlags.SetField | BindingFlags.SuppressChangeType, null, ins ,new object[] { 2 });

您正在将一个
int
传递给
InvokeMember()
方法。我确信,如果您传递了正确类型的值,例如
short
,它将起作用。公共字符串属性{get;set;}是一个属性。公共字符串aMember=“aValue”;被称为成员或字段。@PeterDuniho是的,你是对的,我必须使用类型转换(short)2,以便InvokeMember()正常工作
var type = typeof(Test);

var ins = Activator.CreateInstance(type);

type.InvokeMember("name", BindingFlags.DeclaredOnly |
                    BindingFlags.Public | BindingFlags.NonPublic |
                    BindingFlags.Instance | BindingFlags.SetProperty, null,   ins ,new object[] { "alibaba" });

type.InvokeMember("age", BindingFlags.DeclaredOnly |
                    BindingFlags.Public | BindingFlags.NonPublic |
                    BindingFlags.Instance | BindingFlags.SetProperty | BindingFlags.SetField | BindingFlags.SuppressChangeType, null, ins ,new object[] { 2 });
//credit to stack overflow post and the following post
//https://stackoverflow.com/questions/1089123/setting-a-property-by-reflection-with-a-string-value

Test test = new Test();
PropertyInfo property = typeof(Test).GetProperty("name");
property.SetValue(test, "NameValue", null);
PropertyInfo propertyTwo = typeof(Test).GetProperty("age");
short aShort = 49;
propertyTwo.SetValue(test, aShort, null);