C#While循环无意引用

时间:2016-03-08 00:10:52

标签: c# arrays reference

我正在尝试使用while循环来确定进程何时完成,但为了建立完成,我必须将之前的运行与当前运行进行比较,因此我将比较数组设置为原始...这显然是在创造某种参考,因为当我改变原始的值时,#34; Distinct"数组,值也会在" InDistinct"比较数组。我该如何预防/解决这个问题?否则我的" while(Distinct!= InDistinct)"是没用的。

module V1
  class UsersController < ApiController
    before_action :set_user, only: [:show, :update, :destroy]

    def show
      render json: @user, include: params[:include], status: :ok
    end


    private

    def set_user
      @user = User.find(params[:id])
    end

    def user_params
      attribute_params.permit(:email, :password, roles: [])
    end

    def assign_roles
    end
  end
end

3 个答案:

答案 0 :(得分:1)

在你的while循环开始时这个语句不是这样做的吗?

while (InDistinct != Distinct)
    {
        InDistinct = Distinct;

循环的条件是检查InDistinct数组值是否不等于Distinct值,但是通过将InDistinct值分配给不同的值后,使两者相等。

答案 1 :(得分:1)

我最终在While循环上面启动了InDistinct数组,并通过嵌套for循环将Distinct数组复制到它:

int[,] InDistincta= new int[100,100];
while (InDistincta != Distinct)
{
    for (int a = 0; a < 100; a++)
    {
        for (int b = 0; b < 100; b++)
        {
            InDistincta[a, b] = Distinct[a, b];
        }

答案 2 :(得分:0)

  

数组是一种机制,允许您将多个项目视为一个   单一集合。 Microsoft®.NET公共语言运行时(CLR)   支持一维数组,多维数组和   锯齿状数组(数组数组)。所有数组类型都是隐式的   派生自System.Array,它本身派生自System.Object。   这意味着所有数组都是引用类型   在托管堆上分配,您的应用程序的变量包含一个   引用数组而不是数组本身。   https://msdn.microsoft.com/en-us/library/bb985948.aspx

所以你需要改变

 InDistinct = Distinct;

只是因为在该行之后,这两个名称引用了同一个对象。

尝试将目标数组复制到InDistinct对象

targetArray = new string[sourceArray.Length];
sourceArray.CopyTo( targetArray, 0 );

用于多维数组

Array.Copy(sourceArray,targetArray, sourceArray.Length);