我知道这通常可以追溯到方差,但我不确定如何解决下面显示的问题。
我想要一个通用传感器列表,并将特定传感器类型添加到列表中,但这会产生编译器错误,基本上说明类型 TemHumSensor 与 Sensor
namespace ConsoleApp3
{
abstract class Measurement
{
public double Value { get; set; } = 0;
}
class TempHumMeasurement : Measurement
{
public double Temp { get; set; }
public double Hum { get; set; }
public TempHumMeasurement(double t, double h)
{
Value = t;
Temp = t;
Hum = h;
}
}
abstract class Sensor<T> where T : Measurement
{
public List<T> Measurements = new();
}
class TempHumSensor : Sensor<TempHumMeasurement>
{
public TempHumSensor() { }
}
internal class Program
{
static void Main(string[] args)
{
var sensors = new List<Sensor<Measurement>>();
var ths = new TempHumSensor();
sensors.Add(ths);
}
}
}
问题出在最后一行代码:
为什么会这样,如何正确表达?
我希望这种方法对你有帮助:
using System;
using System.Collections;
using System.Collections.Generic;
namespace ConsoleApp3
{
interface IMeasurement
{
double Value{get;set;}
}
abstract class Measurement
{
public double Value { get; set; } = 0;
}
class TempHumMeasurement : Measurement, IMeasurement
{
public double Temp { get; set; }
public double Hum { get; set; }
public TempHumMeasurement(double t, double h)
{
Value = t;
Temp = t;
Hum = h;
}
}
abstract class Sensor<T> where T : IMeasurement
{
public List<T> Measurements = new();
}
class TempHumSensor : Sensor<IMeasurement>
{
public TempHumSensor() { }
}
internal class Program
{
static void Main(string[] args)
{
var sensors = new List<Sensor<IMeasurement>>();
var ths = new TempHumSensor();
sensors.Add(ths);
}
}
}