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());
  }... 
}