C# 新建类对象错误:对象引用未设置为对象的实例

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

我遇到了以下错误: NullReferenceException:对象引用未设置为对象的实例

当创建countStats对象时,它是NULL,之后我尝试将一个值赋给这个类的字段,并得到这个错误。 我做错了什么

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))