你调用的对象是空的

时间:2012-12-28 11:54:53

标签: c# arrays object-reference

我已经分配了两个字符串数组:

string[] SelectColumns = {},WhereColumns={};

它们都充满了数据项。例如,SelectColumns.length = 7,WhereColumns.Length = 3;

当我去实现它们时,我得到一个例外:对象引用未设置为对象的实例。 我在下面使用它们:

for (int i = 0; i < SelectColumns.Length; i++)
{
    DPS._SelectCol[i] = SelectColumns[i];
}

for (int i = 0; i < WhereColumns.Length; i++)
{
    DPS._WhereCol[i] = WhereColumns[i];
}

这里 DPS 是一个类的对象,如下所示:

public class DefaultProfileSetting
{
    private string Server;

    public string _Server
    {
        get { return Server; }
        set { Server = value; }
    }

    private string Authentication;

    public string _Authentication
    {
        get { return Authentication; }
        set { Authentication = value; }
    }
    private string Login;

    public string _Login
    {
        get { return Login; }
        set { Login = value; }
    }
    private string Pass;

    public string _Pass
    {
        get { return Pass; }
        set { Pass = value; }
    }
    private string DB;

    public string _DB
    {
        get { return DB; }
        set { DB = value; }
    }
    private string Table;

    public string _Table
    {
        get { return Table; }
        set { Table = value; }
    }
    private string[] SelectCol;

    public string[] _SelectCol
    {
        get { return SelectCol; }
        set { SelectCol = value; }
    }
    private string[] WhereCol;

    public string[] _WhereCol
    {
        get { return WhereCol; }
        set { WhereCol = value; }
    }
}

3 个答案:

答案 0 :(得分:3)

您可能只有字符串数组引用_SelectCol但不是实际数组,需要实例化_SelectCol字符串数组以为其元素分配内存。

DPS._SelectCol = new string [SelectColumns.Length];

for (int i = 0; i < SelectColumns.Length; i++)
{
    DPS._SelectCol[i] = SelectColumns[i];
}

答案 1 :(得分:0)

我无法在DefaultProfileSetting中的任何位置看到您初始化_WhereCol_SelectCol后面的字段,因此这些字段为null

至少你应该:

private string[] SelectCol = new string[size];

虽然这些应该有某种初始人口,否则你也会获得IndexOutOfBoundsException

答案 2 :(得分:0)

很可能您的DPS数组属性未使用正确的长度进行初始化。 你最好设置一个断点并调试你的解决方案,以便你可以自己看到它出错的地方。

如果你说SelectColumns和WhereColumns已经填充了值,那么我敢打赌DPS._SelectCol会导致问题。

您必须以正确的大小初始化该数组。就像是 : DPS._SelectCol =新字符串[SelectColumns.Length];

如果您将阵列放在后面并开始使用List,那么您将不再遇到这些问题。