【发布时间】:2021-07-07 20:09:39
【问题描述】:
我一直在改变和重新改变不明白为什么我没有得到我想要的价值观,也许有人可以解释一下。
我有这个对象
var result = new GetRatePlanListResponse
{
RatePlanId = prodRpsResult.Id,
RatePlanName = prodRpsResult.Name,
EffectiveStartDate = prodRpsResult.EffectiveStartDate,
EffectiveEndDate = prodRpsResult.EffectiveEndDate,
BillingPeriod = prodRpsResult.PRDP_BillingFrequency__c.HasValue ? prodRpsResult.PRDP_BillingFrequency__c.Value.ToString() : null,
ShippingSchedule = prodRpsResult.PRDP_DeliveryFrequency__c.HasValue ? prodRpsResult.PRDP_DeliveryFrequency__c.Value.ToString() : null,
UsageLevel = prodRpsResult?.PRDP_UsageLevel__c,
IncludedUnits = prodRpsResult?.PRDP_NumberofPackages__c,
BasePrice = new RatePlanBasePrice
{
Currency = pricing != null ? pricing.Currency : string.Empty,
Price = pricing != null && pricing.Price != null ? pricing.Price.Value : 0
}
};
然后我用那个对象调用这个函数:
public void PriceConverter<T>(ref T obj)
{
Type t = obj.GetType();
foreach (var prop in t.GetProperties())
{
if (Enum.GetNames(typeof(RootPrices)).Any(x => x.ToLower() == prop.Name.ToLower()))
{
prop.SetValue(obj, ((int)(double.Parse((string)prop.GetValue(obj)) * 100)).ToString(), null);
}
}
}
我的问题是由于某种原因我无法访问货币和价格值。我该怎么做?
编辑:
好的,谢谢大家的信息,我决定改变我的方法,因为如果它们内部有其他对象,我无法更改通用对象属性,因为它们代表不同的引用。尽管我正在更改它,但如果有人知道一种递归或迭代更改引用对象及其引用的所有对象并可以提供解决方案的方法,我将不胜感激具有相似字段的预先存在的代码库的多个对象数据。
【问题讨论】:
-
Currency和Price不是传入对象的属性。您可以从BasePrice变量引用的对象中获取这些。 -
你是说它们是 BasePrice 的属性?如果是这样,我怎样才能获得所有的属性和子属性,我应该如何改变我的周期? @艾米
-
IMO,我认为不应该使用反射。我看不出它给你带来了什么,在这里。
-
我想做一个接收对象的方法,可以遍历所有属性(子属性)并将它们与列表匹配,因此如果需要进行转换,它将自动更改它的值。所以我可以称它为传递对象作为参考,而不必遍历所有对象并手动转换数据。如果您有更好的建议不胜感激
标签: c# foreach getproperties