我正在关注一个例子,它有一个类似这样的类:
public class Price
{
private decimal _sellingPrice;
private decimal _rrp;
public Price(decimal RRP, decimal SellingPrice)
{
_rrp = RRP;
_sellingPrice = SellingPrice;
}
}
然后使用LINQ:
从表中查询的值构造此类var products = from p in new ShopDataContext().Products
select new Model.Product
{
Id = p.ProductId,
Name = p.ProductName,
Price = new Price(p.RRP, p.SellingPrice)
};
在示例中,这似乎有效,但是我收到此错误:
Price = new Price(p.RRP, p.SellingPrice)
The best overload method match has some invalid arguments
Argument 1: cannot convert from 'decimal?' to 'decimal'
p.RRP和p.SellingPrice值从一个表中获取为System.Decimal类型,默认情况下显然可以为空,因此异常,在示例中这似乎运行正常,所以为什么呢?有什么我想念的吗?我正在尝试使用C#,默认情况下我知道它是一种严格的语言,所以没有选项可以关闭并让我的理解工作。
感谢您的见解。
答案 0 :(得分:1)
问题是您的查询返回可为空的十进制类型而不是十进制类型。你需要修改你的构造函数:
public Price(decimal? RRP, decimal? SellingPrice) {
_rrp = (decimal) RRP;
_sellingPrice = (decimal) SellingPrice;
}
如果您想彻底检查可能的错误,可以use one of the techniques described in this article.
答案 1 :(得分:1)
在C#中decimal?
无法隐式转换为decimal
。因此,解决问题的唯一方法是进行显式转换。例如:
var products = from p in new ShopDataContext().Products
select new Model.Product
{
Id = p.ProductId,
Name = p.ProductName,
Price = new Price(
p.RRP ?? 0,
p.SellingPrice ?? 0)
};