C# 在另一个类中创建一个类的实例

本文关键字:一个 实例 另一个 创建 | 更新日期: 2023-09-27 18:34:44

我有一个应用程序,它有多个动态自定义用户控件来收集数据网格视图中的边名称和曲线偏移。我的目标是将它们输入到一个类中,其中包含一些方法来检索一些常见的数据组以供以后处理。

我有一个类定义偏移量的格式(因为它对于单个边缘和边缘列表都是相同的(,然后是另一个将这些边缘分组到一个"示例"中的类。第二类中的方法将返回每个示例所需的通用数组。

代码如下 - 符合正常 - 然后当我尝试设置 offSet 的 sName 属性时,它会返回一个NullReferenceException。我怀疑我没有在 Example 类中正确初始化内容,或者没有正确公开或声明它们(静态、抽象、虚拟??offSet 类工作正常,但在 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"
     }

C# 在另一个类中创建一个类的实例

声明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();
    }
}

我想知道你是否要说e.curve1 = 新的偏移量((;

在最后一行之前?

您收到错误,因为您没有初始化 curve1。换句话说,你得到一个异常,因为 e.curve1 是空的,所以 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
 }

这可能会为您解决问题

Example e = new Example();
e.curve1 = new offSets();
e.curve1.sName = "Some Name";