我正在创建一个非常基本的程序,它有一个填充数组的方法,但是我收到一个我不明白的错误。我是一名试图适应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 TestThreads
谢谢, 亨特
答案 0 :(得分:6)
计算方法应该是静态的。
public static int[] compute(int[] inArray)
答案 1 :(得分:6)
您正在尝试从compute
调用Main
这是一种static
方法的实例方法。要解决这个问题,请将compute
设为静态
public static int[] compute(int[] inArray)
答案 2 :(得分:2)
Main
是一个静态方法 - 它并不特定于任何单个对象 - 实际上,没有创建Program
的实例来调用Main
。 compute
是一个实例方法,需要在单个对象上调用。
两个选项:
make compute
static,这是有道理的,因为它不使用状态(字段):
public static int[] compute(int[] inArray) {...}
在Main
中创建一个实例:
var obj = new Program();
filled = obj.compute(empty);
第一个在这里更具吸引力。为了完整起见,我将第二部分完全包括在内。
答案 3 :(得分:1)
更改public int[] compute(int[] inArray){...}
到
public static int[] compute(int[] inArray){..}
或从
更改您的来电filled = compute(empty);
到
filled = new Program().compute(empty);
您拥有的compute()
方法是实例(非静态)方法,需要调用实例。
答案 4 :(得分:0)
将static添加到compute方法声明中。
public static int[] compute(int[] inArray)
答案 5 :(得分:0)
你的方法不是静态的,而是从静态方法引用的。将其更改为静态。解决。
public static int[] compute(int[] inArray) { ... }