You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用泛型类赋值数组属性时出现空引用异常问题

问题原因及解决方案

问题根源

你定义的ServiceResponse2<T>类中,Data是数组类型(T?[])。在C#中,引用类型(包括数组)的默认值是null,当你创建ServiceResponse2<string>实例时,Data成员并没有自动初始化一个可用的数组对象,直接通过response.Data[0]赋值时,就会触发Object reference not set to an instance of an object的空引用错误。

解决办法

1. 手动初始化数组后再赋值

在给数组元素赋值前,先创建一个指定长度的数组实例:

ServiceResponse2<string> response = new ServiceResponse2<string>();
response.Success = true;
response.Message = "success";
// 初始化长度为2的字符串数组
response.Data = new string[2];
response.Data[0] = filename;
response.Data[1] = outname;

2. 给ServiceResponse2<T>添加构造函数自动初始化数组

修改类的定义,通过构造函数确保数组被初始化:

public class basic
{
    public bool Success { get; set; } = false;
    public string Message { get; set; } = string.Empty;
}
public class ServiceResponse2<T> : basic
{
    public T?[] Data { get; set; }

    // 无参构造:默认初始化空数组
    public ServiceResponse2()
    {
        Data = Array.Empty<T?>();
    }

    // 带参构造:指定数组长度
    public ServiceResponse2(int arrayLength)
    {
        Data = new T?[arrayLength];
    }
}

调用时可以直接指定数组长度:

// 创建时指定数组长度为2
ServiceResponse2<string> response = new ServiceResponse2<string>(2);
response.Success = true;
response.Message = "success";
response.Data[0] = filename;
response.Data[1] = outname;

3. 改用List<T?>替代数组(更灵活)

如果你的数据长度不确定,使用泛型列表会更方便,它可以自动扩容,且默认就能初始化空列表:

public class ServiceResponse2<T> : basic
{
    public List<T?> Data { get; set; } = new List<T?>();
}

调用时直接添加元素即可:

ServiceResponse2<string> response = new ServiceResponse2<string>();
response.Success = true;
response.Message = "success";
response.Data.Add(filename);
response.Data.Add(outname);

内容的提问来源于stack exchange,提问作者CapedCrusader01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:01:01