[英]Dynamically casting objects from FieldInfo.GetValue in c#
我正在嘗試遍歷 class 實例中的所有字段並提取它們的名稱/數據。 字段本身是自定義類的實例,用於存儲具有我需要的某些特定功能的數據。 以下作品:
foreach (var v in typeof(CentralParams).GetFields())
{
if(v.GetValue(_centralParams).GetType() == typeof(BoolEventProperty))
{
BoolEventProperty prop = (BoolEventProperty) v.GetValue(_centralParams);
print(v.Name + " " + prop.Value);
}
if(v.GetValue(_centralParams).GetType() == typeof(FloatEventProperty))
{
FloatEventProperty prop = (FloatEventProperty) v.GetValue(_centralParams);
print(v.Name + " " + prop.Value);
}
if(v.GetValue(_centralParams).GetType() == typeof(IntEventProperty))
{
IntEventProperty prop = (IntEventProperty) v.GetValue(_centralParams);
print(v.Name + " " + prop.Value);
}
}
但是,我必須在字段中手動檢查 object 的類型,然后將其轉換為該類型的新實例以訪問 Value 成員。 這很煩人,因為每次我向 CentralParams class 添加新數據類型時,我都必須在這里明確處理它。
有沒有辦法可以動態地將其轉換為正確類型的空變量?
v.GetValue(_centralParams).GetType()
返回我需要的類型,所以看起來應該是可能的。
類似的東西
var type = v.GetValue(_centralParams).GetType();
var prop = (type)v.GetValue(_centralParams);
謝謝
從 C# 8.0 開始,您可以使用模式匹配。 像這樣的東西:
foreach (var v in typeof(CentralParams).GetFields())
{
var property = v.GetValue(_centralParams);
var value = property switch
{
BoolEventProperty prop => $"{prop.Value} from bool",
FloatEventProperty prop => $"{prop.Value} from float",
IntEventProperty prop => $"{prop.Value} from int",
_ => throw new InvalidOperationException($"Unknown type {property?.GetType()}")
};
print(v.Name + " " + value);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.