C# 对象引用问题

本文关键字:问题 对象引用 | 更新日期: 2023-09-27 17:58:17

我正在创建一个非常基本的程序,它有一个填充数组的方法,但我得到一个我不明白的错误。我是一名试图适应C#和.NET的Java程序员。任何帮助都会很棒。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
namespace TestThreads
{
    class Program
    {
        static void Main(string[] args)
        {
             int[]  empty = new int[50001];
             int[] filled = new int[50001];
            filled = compute(empty); //error occurs here
            Console.ReadLine();
        }
        public int[] compute(int[] inArray)
        {
            for (int i = 0; i < inArray.Length; i++)
            {
                inArray[i] = i << 2;
            }
            return inArray;
        }
    }
}

错误信息:

错误 1 非静态字段、方法或属性 'TestThreads.Program.compute(int[](' C:''Users''hunter.mcmillen''Desktop''TestProcessSplitting''TestProcessSplitting''Program.cs 17 22 个测试线程

谢谢猎人

C# 对象引用问题

计算方法应该是静态的。

public static int[] compute(int[] inArray)

您正在尝试调用compute,这是一个实例方法,Main这是一个static方法。 要解决此问题,compute也设置为静态">

public static int[] compute(int[] inArray) 
Main是一个

静态方法 - 它不特定于任何单个对象 - 实际上,没有创建Program实例来调用Maincompute 是一个实例方法,需要在单个对象上调用。

两个选项:

  1. 使compute静态,这是有意义的,因为它不使用状态(字段(:

    public static int[] compute(int[] inArray) {...}
    
  2. Main中创建实例:

    var obj = new Program();
    filled = obj.compute(empty); 
    

第一个在这里更吸引人。我包括第二个纯粹是为了完整。

更改public int[] compute(int[] inArray){...}

public static int[] compute(int[] inArray){..}

或将通话从

filled = compute(empty); 

filled = new Program().compute(empty); 

您拥有的compute()方法是实例(非静态(方法,需要调用实例。

将静态添加到计算方法声明中。

public static int[] compute(int[] inArray)

你的方法不是静态的,而是从静态方法引用的。将其更改为静态。解决。

public static int[] compute(int[] inArray) { ... }