我有一个具有多个动态自定义用户控件的应用程序,用于在datagridviews中收集边缘名称和曲线偏移。我的目标是使用一些方法将它们输入到一个类中,以便检索一些常见的数据组,以便稍后处理。
我有一个类定义了偏移的格式(因为它对于单个边和一个边列表都是相同的),然后是另一个将这些边组合成一个“示例”的类。第二个类中的方法将返回每个示例所需的公共数组。
代码低于 - 确定 - 然后当我尝试设置offSet的sName属性时,它返回NullReferenceException
。我怀疑我没有在Example类中正确初始化事物,或者没有正确地公开或声明它们(静态,抽象,虚拟??)。 offSets类工作正常,但不是在Example类中访问它时。
请帮忙!
private class offSets
{
public string sName { get; set; }
public double d0 { get; set; }
public double d1 { get; set; }
public double d2 { get; set; }
public double d3 { get; set; }
public double d4 { get; set; }
public double d5 { get; set; }
public double d6 { get; set; }
public double d7 { get; set; }
public double d8 { get; set; }
public double dLength { get; set; }
}
private class Example
{
public offSets curve1 { get; set; }
public offSets curve2 { get; set; }
public List<offSets> lstCurves { get; set; }
public string testString { get; set; }
public double[] somemethod()
{
//code that returns an array - something lie:
return this.lstCurves.Select(i => i.d2).ToArray();
}
}
private void temp()
{
Example e = new Example();
e.testString = "This is some test text";
MessageBox.Show(e.testString);
// This works as expected.
e.curve1.sName = "Some Name";
// error on above line: "System.NullReferenceException"
}
答案 0 :(得分:2)
curve1
属性声明,但是“空”(即null
)。
将一个构造函数添加到Example
类,然后在其中创建offSets
个对象:
private class Example
{
public offSets curve1 { get; set; }
public offSets curve2 { get; set; }
public List<offSets> lstCurves { get; set; }
public string testString { get; set; }
public Example()
{
this.curve1 = new offSets();
this.curve2 = new offSets();
this.lstCurves = new List<offSets>();
}
public double[] somemethod()
{
//code that returns an array - something lie:
return this.lstCurves.Select(i => i.d2).ToArray();
}
}
答案 1 :(得分:0)
这可能会为你做到这一点
Example e = new Example();
e.curve1 = new offSets();
e.curve1.sName = "Some Name";
答案 2 :(得分:0)
我想知道你是否必须说 e.curve1 = new offsets();
在最后一行之前?
答案 3 :(得分:0)
您收到错误是因为您没有初始化curve1。换句话说,你得到一个例外,因为e.curve1为null,所以不能分配e.curve1.sName。
您需要修改temp()函数:
private void temp()
{
Example e = new Example();
e.testString = "This is some test text";
MessageBox.Show(e.testString);
// This works as expected.
e.curve1 = new offSets();
e.curve1.sName = "Some Name";
// now it should work
}