提问人:Nicola K 提问时间:7/18/2018 最后编辑:Nicola K 更新时间:7/18/2018 访问量:512
C# 列表未初始化 [已关闭]
C# List not initializing [closed]
问:
所以我现在有两个列表的这个类。一个正在初始化,一个没有,我不明白为什么。 就在那里,因为我认为我太愚蠢了,无法初始化列表,但工作得很好。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
}
}
我做错了什么?
感谢您的帮助
编辑1:
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; } }
}
答:
0赞
Chad
7/18/2018
#1
你的应用正在将节点添加到 null 列表中,因为它超出了 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);
}
}
评论
0赞
Nicola K
7/18/2018
这不是应该做的。如果在日历中找到用户,则不应添加该用户。这就是为什么我返回 1 而不是 0 的原因。
0赞
PaulF
7/18/2018
我认为代码的想法是它不会向列表中添加重复的条目 - 因此它会循环当前列表并在找到匹配项时退出。使用此代码,永远无法添加节点。
0赞
Chad
7/18/2018
@NicolaK - 更新了答案,为你想做什么提供了更好的逻辑
0赞
PaulF
7/18/2018
好吧,这将避免异常 - 但它并没有回答为什么“_calendar”首先是空的。它被初始化为正确类型列表的新实例,并且OP已经检查了代码似乎没有将其设置为null。“somelist”以相同的方式初始化,并且不为空。
1赞
Nicola K
7/18/2018
#2
所以,我感到很惭愧。
在从代码的字面开始调试所有内容后,我发现了一个加载函数,它不应该存在,它将我的空 JSON 字符串 ofc 设置为空列表。我写的时候一定是半睡半醒,我没有把它放在我的课堂上......_calendar
我不知道为什么Visual Studio没有向我显示这部分,当我之前搜索时。也许是因为我没有打开启动文件?_calendar
无论如何,感谢您的帮助和时间。
(我仍然会研究这个部分,看起来非常重要!lock
评论
addNode
node
_calendar
if (item.Username == node.Username)
node.Username
_calendar
readonly
_calendar
_calendar
_calendar