C#列表未初始化

时间:2018-07-18 13:45:42

标签: c# list nullreferenceexception

所以我现在有两节课。一种正在初始化,另一种没有初始化,我不明白为什么。 someList就在那儿,因为我认为我太愚蠢而无法初始化列表,但是someList的工作原理还不错。

这是我的课程:

using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;

class Calendar
{
    static List<CalendarNode> _calendar = new List<CalendarNode>();
    static List<int> someList = new List<int>();

    public static int addNode(CalendarNode node)
    {
        if (_calendar != null)
        {
            foreach (CalendarNode item in _calendar)
            {
                if (item.Username == node.Username)
                {
                    return 1;
                }

            }

        }
        someList.Add(1);        // works like a charm
        _calendar.Add(node);    // throws Error Object reference not set to an instance of an object
    }
}

我在做什么错了?

感谢您的帮助

edit1:

Regex pattern = new Regex(@"\.0000");
        DateTime date;
        IUserMessage message;
        CalendarNode node = new CalendarNode();

        try
        {
            if (pattern.Match(birthday).Success)
            {
                Regex replace = new Regex(@"\d{4}");
                birthday = replace.Replace(birthday, "1900");
                date = DateTime.ParseExact(birthday, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture);
            }
            else
            {
                date = DateTime.ParseExact(birthday, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture);
            }

            node = new CalendarNode(Context.User.Mention, date);
        }
        catch (Exception)
        {
            message = await Context.Channel.SendMessageAsync($"Probably invalid date! Use format: \"dd.mm.yyyy\"\nIf the error persists, contact Nigolasy");
        }
        int status = 2;
        if (node != null)
        {
            status = Calendar.addNode(node); 
        }

这是我称为addNode的代码。

还有我的CalendarNode类,以防它很重要

class CalendarNode
{
    string username;
    DateTime birthdate;

    public CalendarNode(string username, DateTime birthdate)
    {
        this.username = username;
        this.birthdate = birthdate;
    }
    public CalendarNode(){ }

    public string Username { get { return username; } }
    public DateTime Birthdate { get { return birthdate; } }
}

2 个答案:

答案 0 :(得分:1)

所以,我感到非常羞愧。

从代码的字面意义开始调试所有内容后,我发现了一个加载函数,该函数现在还不应该存在,该函数将我的_calendar和一个空的JSON字符串ofc设置为一个空列表。我写这本书的时候一定没睡着...

当我早先搜索_calendar时,我不知道为什么Visual Studio没有向我展示这一部分。也许是因为我没有打开启动文件?

无论如何,感谢您的帮助和时间。

(我仍然会研究lock部分。看起来非常重要!)

答案 1 :(得分:0)

您的应用会将节点添加到列表中,因为该列表不在null的检查范围之内。

public static int addNode(CalendarNode node)
{
    if (_calendar != null)
    {
        foreach (CalendarNode item in _calendar)
        {
            if (item.Username == node.Username)
            {
                return 1;
            }

        }
             _calendar.Add(node);
    }

}