新类对象错误:对象引用未设置为对象的实例 [重复]

New class object error : Object reference not set to an instance of an object [duplicate]

提问人:pitten 提问时间:1/30/2020 最后编辑:Alexei Levenkovpitten 更新时间:1/30/2020 访问量:1753

问:

我遇到了这个错误: 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;

        }
 public class StatsCountsViewModel
    {
        public string CountUsers { get; set; }
        public string CountSms { get; set; }
        public string CountSuccessForecast { get; set; }

    }
C# 实体框架 ASP.Net-Core NullReferenceException Blazor

评论

2赞 Alexei Levenkov 1/30/2020
虽然 John 的好回答提供了复制粘贴就绪的解决方案,但您的问题实际上没有什么新东西 - 当您从缓存中没有获取任何对象时,代码显式运行,并且这种情况(使用默认值初始化的变量)已经在标准重复中涵盖。null

答:

4赞 ProgrammingLlama 1/30/2020 #1

这是你的问题:

_cache.TryGetValue("CountsStats", out countStats)

out将更改指向的对象。如果在缓存中找到它,则它将成为缓存对象。伟大!如果不是,那么它将是.在这种情况下,您需要创建一个新实例。countStatsnull

您应该将代码更改为:

var countStats = null;

if (!_cache.TryGetValue("CountsStats", out countStats))
{
    countStats = new StatsCountsViewModel();
1赞 Athanasios Kataras 1/30/2020 #2

问题就在这里:

if (!_cache.TryGetValue("CountsStats", out countStats))

您正在传递使用该单词,并且在 try get 值的某个地方,您在那里设置了一个 null。countStatsout