在声明paymentstatus是否为null或“if”语句中是否有值时,我收到了未分配变量“ps”的错误使用。我在想我已经宣布了ps,但显然我做错了。为什么编译器会抱怨这个?
这是上下文中的错误:
public IList<BestsellersReportLine> DailyBestsellersReport()
{
OrderStatus os;
PaymentStatus? ps;
ShippingStatus ss;
int billingCountryId = 0;
int recordsToReturn = 999;
int orderBy = 1;
int groupBy = 1;
int? paymentStatusId = null;
if (ps.HasValue)
paymentStatusId = (int)ps.Value;
// Specifies the time range for sold products/day
var range = new
{
startTimeUtc = DateTime.Today.AddDays(-1),
endTimeUtc = DateTime.Today.AddSeconds(-1),
CreatedOnUtc = DateTime.Today.AddDays(-1),
};
var query1 = from opv in _opvRepository.Table
join o in _orderRepository.Table on opv.OrderId equals o.Id
join pv in _productVariantRepository.Table on opv.ProductVariantId equals pv.Id
join p in _productRepository.Table on pv.ProductId equals p.Id
where (o.CreatedOnUtc >= range.startTimeUtc && o.CreatedOnUtc <= range.endTimeUtc) &&
(!paymentStatusId.HasValue || paymentStatusId == o.PaymentStatusId)
select opv;
}
谢谢!
答案 0 :(得分:4)
您已声明了本地变量,但尚未指定值。因此编译器可以帮助您防止此错误。
PaymentStatus? ps;
// ...
if (ps.HasValue)
所以指定一个值:
PaymentStatus? ps = null;
// ...
if (ps.HasValue)
然而,thix修复了编译器错误,但仍然没有意义,因为它永远不会有值。也许您想要使用方法参数:
public IList<BestsellersReportLine> DailyBestsellersReport(PaymentStatus? ps)
{
答案 1 :(得分:2)
初始化您的ps
变量,如
PaymentStatus? ps = null; //or something.
C#编译器不允许使用未初始化的变量。如果 编译器检测到可能没有的变量的使用 初始化后,它会生成编译器错误CS0165
答案 2 :(得分:1)
这是一个未分配的变量,即您没有用值初始化它。
答案 3 :(得分:1)
是的,你确实声明了变量。
然而它说“未分配”而非“未声明”,并且您没有为变量分配任何值。只需将其设置为null。
答案 4 :(得分:1)
您尚未初始化ps
...您需要至少使用null
值进行初始化...
PaymentStatus? ps = null;
这同样适用于所有其他变量