Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法中的变量添加被忽略_C#_Function_Procedures - Fatal编程技术网

C# 方法中的变量添加被忽略

C# 方法中的变量添加被忽略,c#,function,procedures,C#,Function,Procedures,前提是根据角色选择的方向和掷骰子的值,在网格周围移动角色 正在PrepareMove中调用函数CalculateMove。在CalculateMove中,变量finishX或finishY被添加或减去diceValue的值 所有与finalX或CalculateMove中finalY有关的内容都被忽略,即使在if语句外部写入+=3。 有什么想法吗,伙计们( 谢谢,您正在通过值传递finishX和finishY,因此当您在CalculateMove方法中更改它们的值时,您正在更改Calcula

前提是根据角色选择的方向和掷骰子的值,在网格周围移动角色

正在
PrepareMove
中调用函数
CalculateMove
。在CalculateMove中,变量
finishX
finishY
被添加或减去
diceValue
的值

所有与finalX或CalculateMove中finalY有关的内容都被忽略,即使在if语句外部写入+=3。

有什么想法吗,伙计们(
谢谢,

您正在通过值传递
finishX
finishY
,因此当您在
CalculateMove
方法中更改它们的值时,您正在更改
CalculateMove
方法的本地副本的值,而不是原始变量

您需要通过如下引用传递
finishX
finishY

static void CalculateMove(
    string playerMoveDirection,
    string[,] board,
    int diceValue, int startX, int startY,
    ref int finishX, ref int finishY)
{
    ...
}
public class Coordinates
{
    public int X {get;set;}
    public int Y {get;set;}
}
finish_coordinates.X = ...
您还需要对
PrepareMove
方法执行相同的操作

顺便说一句,如果您创建一个类来保存X和Y值(如下所示)会更好:

static void CalculateMove(
    string playerMoveDirection,
    string[,] board,
    int diceValue, int startX, int startY,
    ref int finishX, ref int finishY)
{
    ...
}
public class Coordinates
{
    public int X {get;set;}
    public int Y {get;set;}
}
finish_coordinates.X = ...
然后对该方法进行以下定义:

static void CalculateMove(
    string playerMoveDirection,
    string[,] board,
    int diceValue,
    Coordinates start_coordinates,
    Coordinates finish_coordinates)
{
    ...
}
然后你可以像这样访问坐标:

static void CalculateMove(
    string playerMoveDirection,
    string[,] board,
    int diceValue, int startX, int startY,
    ref int finishX, ref int finishY)
{
    ...
}
public class Coordinates
{
    public int X {get;set;}
    public int Y {get;set;}
}
finish_coordinates.X = ...
这将使您的代码更具可读性,并且您不必通过引用来传递它


您也应该对其他方法执行同样的操作。

您正在通过值传递
finishX
finishY
,因此当您在
CalculateMove
方法中更改它们的值时,您正在更改
CalculateMove
方法的本地副本的值,而不是原始变量

您需要通过如下引用传递
finishX
finishY

static void CalculateMove(
    string playerMoveDirection,
    string[,] board,
    int diceValue, int startX, int startY,
    ref int finishX, ref int finishY)
{
    ...
}
public class Coordinates
{
    public int X {get;set;}
    public int Y {get;set;}
}
finish_coordinates.X = ...
您还需要对
PrepareMove
方法执行相同的操作

顺便说一句,如果您创建一个类来保存X和Y值(如下所示)会更好:

static void CalculateMove(
    string playerMoveDirection,
    string[,] board,
    int diceValue, int startX, int startY,
    ref int finishX, ref int finishY)
{
    ...
}
public class Coordinates
{
    public int X {get;set;}
    public int Y {get;set;}
}
finish_coordinates.X = ...
然后对该方法进行以下定义:

static void CalculateMove(
    string playerMoveDirection,
    string[,] board,
    int diceValue,
    Coordinates start_coordinates,
    Coordinates finish_coordinates)
{
    ...
}
然后你可以像这样访问坐标:

static void CalculateMove(
    string playerMoveDirection,
    string[,] board,
    int diceValue, int startX, int startY,
    ref int finishX, ref int finishY)
{
    ...
}
public class Coordinates
{
    public int X {get;set;}
    public int Y {get;set;}
}
finish_coordinates.X = ...
这将使您的代码更具可读性,并且您不必通过引用来传递它

您还应该对其他方法执行相同的操作。

在函数退出后,您需要对参数使用“ref int finishX”和“ref int finishY”来保留值

函数退出后,您需要对参数使用“ref int finishX”和“ref int finishY”来保留值