使用 foreach 枚举自定义对象值
Enumerate custom object values with foreach
我已经阅读了几篇文章,但似乎无法找到解决方案。我有这个习惯 class:
public class DBValues
{
public DateTime DB_MfgDateTime;
public string DB_PartNumber;
public string DB_LotNumber;
public string DB_BayResult;
public string DB_BrakeSwitch;
public string DB_SpeedSwitch;
public string DB_RTC;
public string DB_RFID;
public string DB_TestSpin;
public string DB_LEDs;
public int DB_LedADC;
public string DB_48Vstate;
public double DB_48V;
public string DB_12Vstate;
public double DB_12V;
public double DB_PLCV;
public double DB_OpAmpV;
public string DB_HandleUID;
public string DB_StationID;
public string DB_BayNumber;
public string DB_VerifyMfgInfo;
public DateTime DB_BuildTime;
public string DB_FWVerify;
public string DB_FWVersion;};
DBValues db = new DBValues();
在整个过程中,我都这样分配值:db.DB_SpeedSwitch = "PASS";我不想从根本上改变我分配值的方式,但我想吐出这些值以用于调试目的。类似于:
foreach (var val in db)
{
Debug.WriteLine(val.ToString();
}
我已经尝试实现 IEnumerable 并制作一个新的 DBValues 列表,我接近了,但是我的 GetEnumerator 因 OverflowException 而窒息。我知道为什么会这样,但不确定如何解决。我阅读了有关 forech 和 yield return 的信息,但这也没有用。
public IEnumerator<DBValues> GetEnumerator()
{
//throw new NotImplementedException();
foreach (var item in ??????)
{
yield return item;
}
//return GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
//throw new NotImplementedException();
return GetEnumerator();
}
需要一些帮助!
您可以将反射用于此类目的。尝试这样的事情:
FieldInfo[] fields = db.GetType().GetFields(BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
foreach(var field in fields)
{
Debug.WriteLine(field.GetValue(db));
}
我已经阅读了几篇文章,但似乎无法找到解决方案。我有这个习惯 class:
public class DBValues
{
public DateTime DB_MfgDateTime;
public string DB_PartNumber;
public string DB_LotNumber;
public string DB_BayResult;
public string DB_BrakeSwitch;
public string DB_SpeedSwitch;
public string DB_RTC;
public string DB_RFID;
public string DB_TestSpin;
public string DB_LEDs;
public int DB_LedADC;
public string DB_48Vstate;
public double DB_48V;
public string DB_12Vstate;
public double DB_12V;
public double DB_PLCV;
public double DB_OpAmpV;
public string DB_HandleUID;
public string DB_StationID;
public string DB_BayNumber;
public string DB_VerifyMfgInfo;
public DateTime DB_BuildTime;
public string DB_FWVerify;
public string DB_FWVersion;};
DBValues db = new DBValues();
在整个过程中,我都这样分配值:db.DB_SpeedSwitch = "PASS";我不想从根本上改变我分配值的方式,但我想吐出这些值以用于调试目的。类似于:
foreach (var val in db)
{
Debug.WriteLine(val.ToString();
}
我已经尝试实现 IEnumerable 并制作一个新的 DBValues 列表,我接近了,但是我的 GetEnumerator 因 OverflowException 而窒息。我知道为什么会这样,但不确定如何解决。我阅读了有关 forech 和 yield return 的信息,但这也没有用。
public IEnumerator<DBValues> GetEnumerator()
{
//throw new NotImplementedException();
foreach (var item in ??????)
{
yield return item;
}
//return GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
//throw new NotImplementedException();
return GetEnumerator();
}
需要一些帮助!
您可以将反射用于此类目的。尝试这样的事情:
FieldInfo[] fields = db.GetType().GetFields(BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
foreach(var field in fields)
{
Debug.WriteLine(field.GetValue(db));
}