似乎 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 参数时
当我尝试使用 List<KeyValuePair<string, string>> 作为参数之一调用成员时,Type.InvokeMember 引发 MissingMethod
NSURLSessionConfiguration timeoutIntervalForRequest 似乎不适用于后台会话