小编Pan*_*eof的帖子

通过引用传递数组元素

可能重复:
通过引用和.net垃圾回收的C#参数

我在考虑使用ref参数来限制数组的边界检查.例如,交换两个元素的代码是:

class Test {
  int[] array;

  private void qSort() {
    ...blah...
    int temp = array[a];
    array[a] = array[b];
    array[b] = temp;
  }
}
Run Code Online (Sandbox Code Playgroud)

它具有4个访问阵列的替代方案:

class Test {
  int[] array;

  private void qSort() {
  ...blah...
    Swap( ref array[a], ref array[b] );
  }

  static void Swap(ref int a,ref int b) {
    int temp = a;
    a=b;
    GC.Collect();  // suppose this happens
    b=temp;
  }
}
Run Code Online (Sandbox Code Playgroud)

理论上只有2个访问数组

令我困惑的是,当我通过ref传递数组元素时,我不知道到底发生了什么.如果Garbage Collector启动,在Swap函数中执行代码时,是否能够移动数组?或者在呼叫期间固定阵列?

请注意,上面的代码是一个简单的测试用例.我想在更复杂的场景中使用它

编辑:正如BrokenGlass指出的那样,Eric Lippert在这里通过引用和.net垃圾收集来回答C#参数

数组不会被固定,GCollector可以移动它,并且会根据堆栈中的元素更新任何引用.

c#

8
推荐指数
1
解决办法
4601
查看次数

打字稿:编译时清空输出文件

我使用最新的typescript编译器编译以下代码(1.4)

/// <reference path="typescript.d.ts" />

//import ts = require("typescript");
module cc {
console.log("Hello");
}
Run Code Online (Sandbox Code Playgroud)

使用以下编译args

node /TypeScript/built/local/tsc.js -m commonjs --noEmitOnError app.ts -out myApp.js
Run Code Online (Sandbox Code Playgroud)

编译好并生成"myApp.js"文件.

当我取消注释导入行时,编译时没有错误,但它生成一个空(零大小)"myApp.js"和一个文件"app.js",即使我已经指定了--noEmitOnError开关.

这是一个条带化示例,实际上我指定了多个".ts"文件,编译时没有错误,空的"myApp.js"文件和我指定的每个".ts"文件,我得到一个".js "档案.

我在Windows 8.1上使用节点0.10.30

typescript

2
推荐指数
1
解决办法
3384
查看次数

标签 统计

c# ×1

typescript ×1