【发布时间】:2020-10-27 07:33:10
【问题描述】:
我有一个我可以自己解决的 QoL 问题。请参阅下面的代码和一些解释
public void UpdateStock(long? instID, float? Value, int counter,string KpiName)
{
{
List<KpiReturn> updateKpi = new List<KpiReturn>();
updateKpi.Add(new KpiReturn { instID = instID, KpiName = Value });
}
}
我的属性看起来像这样的一个类:
public partial class KpiReturn
{
public long? instID { get; set; }
public double? peValue { get; set; }
public double? psValue { get; set; }
public double? pbValue { get; set; }
}
此代码不起作用,因为我的 kpiReturn 剂量具有“KpiName”的定义 现在,我根据是否需要 peValue、psValue、pbValue 运行 3 个不同的 if 语句。但我想为此添加更多属性。
在附加的 void UpdateStock 代码中,我已将字符串“psValue”传递给 KpiName。
有什么方法可以让程序理解代码中的内容
updateKpi.Add(new KpiReturn { instID = instID, KpiName = Value }
我想传递 kpiName 值而不是实际名称“kpiName”?即 psValue,pbValue 或 peValue
【问题讨论】:
-
这根本不是你能做的。您可能得到的最接近的是在内部进行切换的索引器,可能在枚举上
-
为什么不能直接找到合适的
KpiReturn并修改其属性?例如GetKpi(12345).psValue = 3.14159 -
听起来有点像您的方法可能正在做许多不同的事情,并且您正在使用 if 语句来有效地运行单独的操作。如果是这种情况,您会更喜欢做一件事的更简单的方法。
-
好吧,你可以尝试使用
dynamic对象 stackoverflow.com/questions/12709333/… 但是你当然会失去编译时类型检查。 -
对@MarcGravell 的切换想法的一个转折:在
KpiReturn内创建一个private Dictionary<string, double?>来保存所有值,然后使用它们的Dictionary将所有peValue, psValue属性包装起来字符串名称作为键。然后为KpiReturn创建一个构造函数,它接受你的字符串键和double?值,并将它们添加到Dictionary。
标签: c#