Class 使用反射在类中设置字段
这应该很容易,但它设法让我困惑了几次。我试图使用反射在类中设置一个值Class 使用反射在类中设置字段,class,reflection,field,Class,Reflection,Field,这应该很容易,但它设法让我困惑了几次。我试图使用反射在类中设置一个值 public class EngineeringValueClass<T> { public T Value { get { } set { } } } 使用set访问器设置Value1的“值”。我假设我的问题是MyNameFieldRef.GetValue不返回对象引用,而是返回一个“值”,但我不确定如何解决这个问题。我不想通过“这个”,因为那也不对 好吧,我终于明白了: public
public class EngineeringValueClass<T> {
public T Value { get { } set { } }
}
使用set访问器设置Value1的“值”。我假设我的问题是MyNameFieldRef.GetValue不返回对象引用,而是返回一个“值”,但我不确定如何解决这个问题。我不想通过“这个”,因为那也不对 好吧,我终于明白了:
public void SetValueByName(object FieldName, object FieldValue) {
Type t = typeof(MyClass);
FieldInfo PrimaryField = t.GetField(FieldName.ToString());
object ValueField = PrimaryField.GetValue(this);
// To get the type of Value
MethodInfo TypeValueField = ValueField.GetType().GetMethod("GetValueType");
Type ValueType = (Type) TypeValueField.Invoke(ValueField, null);
// I added a "GetValueType () { return typeof(T); } to EngineeringValueClass
if (ValueType == typeof(Int16))
{
((EngineeringValueClass<Int16>)ValueField).Value = Int16.Parse(FieldValue.ToString());
}...
}
public void SetValueByName(对象字段名,对象字段值){
类型t=类型(MyClass);
FieldInfo PrimaryField=t.GetField(FieldName.ToString());
对象ValueField=PrimaryField.GetValue(此);
//获取值的类型
MethodInfo TypeValueField=ValueField.GetType().GetMethod(“GetValueType”);
Type ValueType=(Type)TypeValueField.Invoke(ValueField,null);
//我向EngineeringValueClass添加了一个“GetValueType(){returntypeof(T);}”
if(ValueType==typeof(Int16))
{
((EngineeringValueClass)ValueField.Value=Int16.Parse(FieldValue.ToString());
}...
}
SetValueByName("Value1",2.3);
public void SetValueByName(object FieldName, object FieldValue) {
Type t = typeof(MyClass);
FieldInfo PrimaryField = t.GetField(FieldName.ToString());
object ValueField = PrimaryField.GetValue(this);
// To get the type of Value
MethodInfo TypeValueField = ValueField.GetType().GetMethod("GetValueType");
Type ValueType = (Type) TypeValueField.Invoke(ValueField, null);
// I added a "GetValueType () { return typeof(T); } to EngineeringValueClass
if (ValueType == typeof(Int16))
{
((EngineeringValueClass<Int16>)ValueField).Value = Int16.Parse(FieldValue.ToString());
}...
}