代码大体如下:
class c1
{
  public static void stoiarr(string s, ref int[] a)
  {
    ...
    ArrayList al = new ArrayList();
    ...
    a = new int[al.count]; // 我在这里给数组申请空间,等到函数结束后是否还能保留
                           // 这部分空间。这个算不算非法的引用。不过这段代码运行
                           // 正常,没出现什么错误。
    ...
  }
}class c2
{
  public static void Main()
 {
    c1 li = new c1();
    string s = "1,4-7,11";
    int[] a = null;
    libin.SToIntArray(s, ref a); // 给定的字符串经过函数处理后通过整型数组a输出。在这里
                                 // 数组a经过函数处理后应该包含以下值{1,4,5,6,7,11}
    foreach (int i in a)
    {
        System.Console.WriteLine(i);
    }
    System.Console.ReadLine();
 }
}我这样做对吗?今后的运行过程中是否会蹦错呢?
以前用c++,最近初学c#,对这种问题很不明白。
大家来帮帮我吧。

解决方案 »

  1.   

    对的,没错啊。ref类似于c++的指针。对于引用对象的ref,就是指针的指针。
      

  2.   

    反正ref的地方没有错,其他边界条件如检查是不是null或者其它代码就不知道了。
      

  3.   

    你这里用out关键字标示可能更好,虽说ref可以起到一样的作用。
      

  4.   

    同意使用out 
    out和ref的为一区别就是在编译时 ref必须要赋值  但是你ref赋值为null,指向空地址,调用人人用起来容易出错
    所以用out好一些
      

  5.   

    多谢大家,问题得以解决。被水淹死的鱼,我按照你的建议将ref改成了out,效果确实比ref好很多。多谢各位!