C# 新建类对象错误:对象引用未设置为对象的实例
我遇到了以下错误: NullReferenceException:对象引用未设置为对象的实例 当创建countStats对象时,它是NULL,之后我尝试将一个值赋给这个类的字段,并得到这个错误。 我做错了什么C# 新建类对象错误:对象引用未设置为对象的实例,c#,entity-framework,asp.net-core,nullreferenceexception,blazor,C#,Entity Framework,Asp.net Core,Nullreferenceexception,Blazor,我遇到了以下错误: NullReferenceException:对象引用未设置为对象的实例 当创建countStats对象时,它是NULL,之后我尝试将一个值赋给这个类的字段,并得到这个错误。 我做错了什么 public async Task<MainPageViewModel> GetMainPageViewModelAsync() { var model = new MainPageViewModel(); var
public async Task<MainPageViewModel> GetMainPageViewModelAsync()
{
var model = new MainPageViewModel();
var countStats = new StatsCountsViewModel(); // NULL
if (!_cache.TryGetValue("CountsStats", out countStats))
{
var result = await _contextRepository.GetStatsMainPageAsync();
countStats.CountSms = "300"; //ERROR
countStats.CountUsers = "600";
countStats.CountSuccessForecast = "1228";
model.Stats = countStats;
_cache.Set("CountsStats", countStats, new MemoryCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
});
}
var forecasts = await _contextRepository.GetForecastsOnSaleAsync();
foreach (var item in forecasts)
{
model.Forecasts.Add(item);
model.Bookmaker.Add(await _contextRepository.GetBookmakersForForecastsAsync(item.Id));
}
return model;
}
这就是你的问题:
_cache.TryGetValue("CountsStats", out countStats)
out
将更改countStats
指向的对象。如果在缓存中找到它,那么它将是缓存的对象。伟大的如果不是,那么它将是null
。在这种情况下,您需要创建一个新实例
您应该将代码更改为:
var countStats = null;
if (!_cache.TryGetValue("CountsStats", out countStats))
{
countStats = new StatsCountsViewModel();
问题在于:
if (!_cache.TryGetValue("CountsStats", out countStats))
您正在使用
out
字传递countStats
,并且在try-get值的某个地方,您在那里设置了一个null。虽然John的好答案提供了复制粘贴就绪的解决方案,但您的问题中确实没有什么新内容-当您从缓存中没有获取对象时,代码会显式运行,这种情况就是这样(使用默认值null
值初始化的变量)已包含在标准副本中。
if (!_cache.TryGetValue("CountsStats", out countStats))