一、目的
给定字段的名字(string),用反射获取对象上该字段的值。
写算法的时候,自由度比较大,但用反射可能会有一定性能开销。
二、代码
/// <summary>
/// 给定字段的名字(string),用反射获取对象上该字段的值
/// </summary>
/// <typeparam name="T">字段的值的类型</typeparam>
/// <typeparam name="MyClass">对象的类型</typeparam>
/// <param name="fieldName">字段名字</param>
/// <param name="myObject">传入的对象</param>
/// <returns>T value</returns>
public static T GetFieldValue<T, MyClass>(string fieldName, MyClass myObject)
{
// 获取类型信息
Type myType = typeof(MyClass);
// 获取字段信息
FieldInfo fieldInfo = myType.GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
// 获取字段的值
T value = (T)fieldInfo.GetValue(myObject);
return value;
}
三、调用样式
//QiXiang qixiang = new QiXiang();
var rtn = GetFieldValue<float,QiXiang>("airHumidity", qixiang);
其中QiXiang的定义说明:
/// <summary>
/// 气象要素表
/// </summary>
[Serializable]
public class QiXiang
{
/// <summary>
/// 空气湿度
/// </summary>
[Header("空气湿度")]
[SerializeField]
public float airHumidity;
/// <summary>
/// 降水量
/// </summary>
[Header("降水量")]
[SerializeField]
public float rainCount;
/// <summary>
/// 总辐射
/// </summary>
[Header("总辐射")]
[SerializeField]
public float totalIrradiation;
}