使用';ref';关键字
本文关键字:关键字 ref 使用 | 更新日期: 2023-09-27 18:23:47
我理解为什么在编写交换两个值的函数时应该使用ref
,但我不知道如何在整个数组中使用关键字。这听起来很傻,但我试着把关键字粘在我能想到的任何地方(例如,在参数之前,在变量之前,等等),但我仍然得到以下错误:
错误1非静态字段需要对象引用,方法或属性"Swap.Program.swapRotations(int[])"
以下是我迄今为止所做的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Swap
{
class Program
{
static void Main(string[] args)
{
int[] A = {0, 1, 2, 3, 4, 5, 6, 7};
swapRotations(A);
for (int i = 0; i < A.Length; i++)
Console.WriteLine(A[i]);
Console.WriteLine("'nPress any key ...");
Console.ReadKey();
}
private void swapRotations(int[] intArray)
{
int bone1Rot = intArray[3];
int bone2Rot = intArray[5];
// Make the swap.
int temp = bone1Rot;
bone1Rot = bone2Rot;
bone2Rot = temp;
}
}
}
简单的更改:
private void swapRotations(int[] intArray);
至:
private static void swapRotations(int[] intArray);
问题是因为调用方法是static
,所以它使用的任何方法要么需要引用一个对象,要么本身是静态的。
还可以看看@ASh关于如何"正确"执行swapRotations
功能的回答。注意,我说得很恰当,因为仍然可能引发IndexOutOfRange
异常。为了正确和一般地做到这一点,我会按照以下路线做一些事情:
private static void SwapIndexes(int[] array, int index1, int index2)
{
if (index1 >= array.Length || index2 >= array.Length)
throw new Exception("At least one of the indexes is out of range of the array");
int nTemp = array[index1];
array[index1] = array[index2];
array[index2] = nTemp;
}
swap方法不起作用,因为根本不更改数组
ref
中无需,只需设置阵列元素
private void swapRotations(int[] intArray)
{
int temp = intArray[3];
intArray[3] = intArray[5];
intArray[5] = temp;
}
Arrays
是Reference
类型。因此不需要使用ref
关键字来传递数组。问题不在ref
关键字中,但必须从静态方法中仅调用静态方法。例如:
static void Main(string[] args)
{
int[] A = {0, 1, 2, 3, 4, 5, 6, 7};
swapRotations(A);
for (int i = 0; i < A.Length; i++)
Console.WriteLine(A[i]);
Console.WriteLine("'nPress any key ...");
Console.ReadKey();
}
private static void swapRotations(int[] intArray)
{
// Make the swap.
int temp = intArray[3];
intArray[3] = intArray[5];
intArray[5] = temp;
}