【问题标题】:I do not understand why I get this "An Object Reference is Required" error我不明白为什么会出现“需要对象引用”错误
【发布时间】:2013-01-22 10:57:10
【问题描述】:

此代码读取文件数组并将它们传递给以下类库。

    private void btnConvert_Click(object sender, EventArgs e)
    {
        if (rbtnNetIX.Checked == true)
        {
            string[] files = Directory.GetFiles(txtPath.Text, "*.txt");
            NetEDI.NetIX.Seiko.Seiko.Main(files);

        }

应该被下面的代码引用。

public class Seiko
{
    public void Main(string[] args)
    {
        List<FileDefinition.FileDefinition> fileDefs = new List<FileDefinition.FileDefinition>();
        foreach (string fileEntries in args)
        {

            fileDefs.Add(CreateFileDef(fileEntries));
        }

        foreach (var fileDef in fileDefs)
        {
            XmlCreator CreateXmlDefinition = new XmlCreator(fileDef.FileName + ".xml", fileDef);
        }
    }

【问题讨论】:

  • 哪一行导致异常?你调试过这个吗?

标签: c# exception object reference error-handling


【解决方案1】:

Main 不是 static,因此您首先需要对 Seiko 类的对象引用才能调用它。

所以,这里:NetEDI.NetIX.Seiko.Seiko.Main(files); - 这是对非静态方法的静态调用,因此会出现错误。

【讨论】:

    【解决方案2】:

    查看您的Main 方法声明:

    public void Main(string[] args)
    

    这是一个 instance 方法 - 您必须在 Seiko 的实例上调用它。但是当你尝试在这里调用它时:

    NetEDI.NetIX.Seiko.Seiko.Main(files);
    

    ...您尝试将其称为静态方法。

    鉴于Main 周围的约定,我强烈怀疑您想将其设为静态方法。

    (顺便说一句,您可能应该修改静态成员和实例成员之间的区别,然后再看一下错误消息:看看您是否可以弄清楚为什么您自己没有弄清楚问题,以便下次遇到类似的问题,你可以修复它。)

    【讨论】:

    • 谢谢我已经寻找答案 1.5 小时了,我会在允许时标记为答案(等待 10 分钟)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2021-11-13
    • 2023-03-28
    • 2020-04-25
    相关资源
    最近更新 更多