【发布时间】:2019-01-31 10:40:29
【问题描述】:
我需要创建一个包含设备对象的列表。这些对象具有描述其名称、单位和转换的属性。转换有点特殊,因为这应该是一个函数。例如:如果我有一个以华氏度为单位测量的温度传感器,它的转换方法应该计算并返回以摄氏度为单位的值。如果我有一个湿度传感器,它的转换会有所不同等。下面是我如何尝试这样做但它不起作用的示例。我收到错误消息,说转换时只允许赋值。
private class Device
{
public string Name { get; set; }
public Action Conversion { get; set; }
public string Unit { get; set; }
}
public static object ParseDecentLab(byte[] bytes)
{
List<Device> deviceList = new List<Device>()
{
new Device()
{
Name = "battery-voltage",
Conversion = (x) => x / 1000,
Unit = "V"
},
new Device()
{
Name = "air-temperature",
Conversion = (x) => (175 * x / 65535) - 45,
Unit = "°C"
}
};
【问题讨论】:
-
你想要
Func而不是Action -
public Func<double, double> Conversion { get; set; }: 给定double返回double -
旁注,作为设计指南,我会尽量隐藏该属性。代表是奇怪的、不可变的类型。您的用户现在可以为一个 Func 订阅多次转化