我有一个List类型数组:
List<object>[] vector = new List<object>[3];
第一个List包含字符串:
// Get word lists together, remove duplicates
var words = tableA.ToList().Union(tableB.ToList());
// Sort words
words = words.OrderBy(s => s, StringComparer.CurrentCultureIgnoreCase);
// Add words to the vector first slot
vector[0] = words.ToList<object>();
现在,我想在第二个和第三个列表中添加注释,但是我在这里收到错误:
vector[1].Add(tableA.GetValue(keyword));
vector[2].Add(tableB.GetValue(keyword));
GetValue()返回一个int。但是当我将这些内容添加到向量列表时,它会抛出错误:
ERROR Caught: Object reference not set to an instance of an object.
我应该如何向列表中添加注册?或者是否应该使用其他数据结构代替向量?我觉得有一些琐碎的演员我不知道但是我还没有找到解决方案。
答案 0 :(得分:3)
我不是C#的专家,但我想我明白了。 当你写:
List<object> vector = new List<object>[3];
您创建一个大小为3的List表。 您可以将某些内容放入此数组的每个插槽中,但每个“插槽”在第一行代码后仍然不引用任何实例。 当你写
vector[0] = words.ToList<object>();
你把一些东西放到了矢量列表的第一个插槽中。但[1]和[2]仍然是空的。并且
vector[1]
是指未设置为对象实例的引用。简而言之,它指的是什么。
答案 1 :(得分:1)
您必须在添加值之前初始化每个向量索引值。感谢
答案 2 :(得分:1)
撰写var a = new List<object>
时,您只声明a
是一个包含一些(在您的情况下为三个)项目的列表。但是,您无法确定 这三个元素中的内容。在您使用任何之前,您必须在每个项目中输出一些值(例如,调用任何方法)。
你已经将列表放入第一个项目,但索引1和2上的元素在调用如下方法时仍然为null NullReferenceException
:
vector[1].Add(...);
所以你应该在索引oe和之前初始化值:
vector[1] = new List<int>();
vector[2] = new List<int>();
但是你仍然不能对列表做很多事情,因为它的类型为object
,所以你必须将每个元素都转换为实际的类型:
((List<int>)vector[1]).Add(myInt);
无论如何,我怀疑在一个单独的列表中存储三个完全不同的列表是一个好主意。也许您应该定义一个以三个列表为成员的类:
class MyClass
{
public List<string> Words { get; set; }
public List<int> NumbersA { get; set; }
public List<int> NumbersB { get; set; }
}