【发布时间】:2019-07-15 22:12:06
【问题描述】:
这可能是一个基本问题,但我错过了一些东西。我认为基类是可接受的返回签名,但使用 Visual Studio 代码的 .Net Core 2.2 不喜欢它。
public class BasicRisk
{
public string Name {get;set;}
public string Amount{get;set;}
}
public class LowRisk : BasicRisk
{
public string Minimum { get; set; }
}
public class HighRisk : BasicRisk
{
public string Risk { get; set; }
}
现在在某种程度上这是可行的,因为我可以像这样模拟填充数据。
public class MockRiskkData
{
private readonly List<HighRisk> _high = new List<HighRisk>();
public MockRiskkData()
{
_all.Add(
new HighRisk
{
Amount = "9384",
Name = "Johnny Dangerous",
Risk = "Extreme"
}
);
}
}
但是,当我在方法签名中使用基类作为返回值时,我得到无法显式转换错误。现在我的理解是,任何使用基类的继承类都将满足返回签名。
public class MockRiskkData
{
private readonly List<HighRisk> _high = new List<HighRisk>();
private readonly List<LowRisk> _low = new List<LowRisk>();
public MockRiskkData()
{
_all.Add(
new HighRisk
{
Amount = "9384",
Name = "Johnny Dangerous",
Risk = "Extreme"
}
);
}
public Task<List<BasicRisk>> GetRiskAsync(int risktype)
{
if(risktype == 1)
{
return Task.FromResult(_high); //Cannot implicitly convert type
}
return Task.FromResult(_low); //Cannot implicitly convert type
}
}
很明显,我的理解是不正确的,所以如果你能纠正我,我将不胜感激。
TIA
【问题讨论】:
-
可能是同样的问题,但我删除了任务包装器并尝试了 List
和同样的问题。 -
同样的问题。它在链接问题的接受答案中有所描述。
-
顺便说一下,在典型的
Animal、Dog、Cat类层次结构中可以看到不能将派生列表大小写为基列表的原因。如果您有List<Dog>并将其转换为List<Animal>,那么有人可以将Cat添加到列表中(因为猫也是动物)。那时,您的Dogs 之一将是Cat,并且会发生不好的事情。 -
这是重复的。感谢您的帮助。
标签: c#