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

Posted

技术标签:

【中文标题】似乎 Type.InvokeMember 不适用于 short、int16 或其他 16 位数字类型的类【英文标题】:It seems that Type.InvokeMember does not work with short,int16 or other 16bit numeric type of class 【发布时间】:2017-07-13 03:48:34 【问题描述】:
public class Test
    public string nameget;set
    public short ageget;set;

....

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 );

...

运行时找不到方法'age'的异常,如果我将'age'的类型更改为int或其他32+数字类型,它可以工作

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

感谢任何帮助

【问题讨论】:

您将int 传递给InvokeMember() 方法。我确定您是否传递了正确类型的值,例如short,它会工作的。 公共字符串 aPropery get;放; 是一个属性。公共字符串 aMember = "aValue";被称为成员或字段。 @PeterDuniho 是的,你是对的,我必须使用类型转换(短)2,以便 InvokeMember() 正常工作 【参考方案1】:

请你试试这个。它对我有用。

//credit to stack overflow post and the following post
//https://***.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);

【讨论】:

以上是关于似乎 Type.InvokeMember 不适用于 short、int16 或其他 16 位数字类型的类的主要内容,如果未能解决你的问题,请参考以下文章

Type.InvokeMember 当方法具有 Dictionary 参数时

DotNet中Type.InvokeMember用法

当我尝试使用 List<KeyValuePair<string, string>> 作为参数之一调用成员时,Type.InvokeMember 引发 MissingMethod

为啥 CORS 似乎不适用于 POST?

NSURLSessionConfiguration timeoutIntervalForRequest 似乎不适用于后台会话

NSBackgroundColorAttributeName 似乎不适用于 iOS 10.3