private string[] test(int [] s)
{
string [s.Length-1] al;
for(int i=0;i<s.Length-1;i++)
{
               al[i] = (Convert.ToString(s[i]));
}
return al;
}
老提示试用了未赋值的局部变量al
请问要怎么写啊?

解决方案 »

  1.   

    string[] al = new string [s.Length-1];
      

  2.   

    string[] al=new string[s.Length-1];C++新手也常犯这种错误,没有在堆上分配内存,return al;时al已经被销毁
      

  3.   

    因为你return al;的时候al已经不存在了,当然是个未赋值的局部变量。
    重新new一下然后再return al;
      

  4.   

    刚刚看了清柳任命版主一事, 觉得清柳功底确实不怎么样。string[] al = new string[s.Length-1];//这是分配一个数组,虽然你的值是后面分配的,但这个数组(容器)本身是需要new的。
      

  5.   

    没看懂1.这里是C++版还是C# 版?2.为什么是 s.Length-1 而不是 s.Length
      

  6.   

    private string[] test(int [] s)
    {
        string [] al;    if (s.Length == 0)
        {
            return null;
        }
                
        al = new string[s.Length];
        for (int i = 0; i < s.Length; i++)
        {
            al[i] = s[i].ToString();
        }    return al;
    }
      

  7.   

    这样应该可以满足你的要求:定义:
    private void test(int [] s,string [] al)
    {
        al = new string[s.Length];
        for (int i = 0; i < s.Length; i++)
        {
            al[i] = s[i].ToString();
        }
    }调用:
    int[] s = new int[]{1,2,3,4};
    string[] al;
    test(s,al);
      

  8.   

    2.0 的写法 :)int[] a = new int[] {1,2,3,4,5};
    string[] b = Array.ConvertAll<int, string>(a, 
    new Converter<int, string>(Convert.ToString));
      

  9.   

    你是要把int数组转成string数组?不是char数组?
    按着你写的该改成
    private string[] test(int[] s)
    {
    string[] al=new string[s.Length];
    for(int i=0;i<s.Length;i++)
    {
    al[i]=Convert.ToString(s[i]);
    }
    return al;
    }
    1、string [s.Length-1] al;是错误的语句
    2、string[]的长度该是s.Length,而不是s.Length-1,循环的时候也是
      

  10.   

    string[] al = new string [s.Length-1];就ok了
      

  11.   

    string[] al = new string [s.Length-1];
    Oh,my god!how nice fault!
      

  12.   

    到底是C#还是C++,反正不管是什么,上面没一个对的。private string[] test( int[] s )
    {
      string arr = new string[ s.Length ];
      for ( int i = 0; i < arr.Length; i ++ )
        arr[i] = s[i].ToString();
      return arr;
    }挑刺的泛型委托木试,看起来是对的。
      

  13.   

    一个个评析。
    首先下面这个不知道是C++还是C#:private string[] test(int [] s)//如果是C++,此处语法错误,private后面没有:
    {
    string [s.Length-1] al;//如果是C#,此处语法错误,数组类型声明的[]里面不能有任何东西。
    for(int i=0;i<s.Length-1;i++)
    {
                   al[i] = (Convert.ToString(s[i]));
    }
    return al;
    }
    老提示试用了未赋值的局部变量al
    请问要怎么写啊?
    他的编译器竟然没提示语法错误,真是奇怪!
    继续,第二个:string[] al = new string [s.Length-1];//很明显这是C#,可是不应该-1第三个:string[] al=new string[s.Length-1];C++新手也常犯这种错误,没有在堆上分配内存,return al;时al已经被销毁================================================================拜托,Array是引用类型
    古道热肠的其实没大问题,但是细节上有些稍显不足的地方:private string[] test(int [] s)
    {
        string [] al;    if (s.Length == 0)//应该返回空数组,这样更容易理解,因为后面可能会直接foreach。
        {
            return null;
        }
                
        al = new string[s.Length];
        for (int i = 0; i < s.Length; i++)
        {
            al[i] = s[i].ToString();
        }    return al;
    }private void test(int [] s,string [] al)
    {
        al = new string[s.Length];//这个就有些离谱了,没有out关键字,这个al是局部变量。
        for (int i = 0; i < s.Length; i++)
        {
            al[i] = s[i].ToString();
        }
    }
      

  14.   

    呵呵,一时疏忽,写错了。定义:
    private void test(int [] s,out string [] al)
    {
        al = new string[s.Length];
        for (int i = 0; i < s.Length; i++)
        {
            al[i] = s[i].ToString();
        }
    }调用:
    int[] s = new int[]{1,2,3,4};
    string[] al;
    test(s,out al);
      

  15.   

    private string[] test(int [] s)
    {
       string[] al = new string[s.Length];
       for(int i=0;i<s.Length;i++)
       {
                   al[i] = (Convert.ToString(s[i]));
       }
       return al;
    }
    //有问题?谁说有问题?
      

  16.   

    private string[] test(int[] arr)
    {
    string[] array = new string[arr.Length];
    for(int i=0;i<arr.Length;i++)
    {
    array[i]=arr[i].ToString();
    }
    return array;
    }====CSDN 小助手 V2.5 2005年11月05日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
    下载:http://szlawbook.com/csdnv2
      

  17.   

    string [s.Length-1] al;
    哪有这么声明的呀
      

  18.   

    swordragon(古道热肠) 的第一个明明是正确的。
      

  19.   

    第一个对吗?嘿嘿    if (s.Length == 0)
        {
            return null;
        }应当这样xie:if(s == null) return null;
    if(s.Length == 0) return new string[0]; // 这行也可以不要,因为下面循环也处理了
      

  20.   

    swordragon(古道热肠) 的第一个明明是正确的。===============================================================string[] str_arr = new string[0];foreach( int i in test( str_arr ) )//抛出莫名异常,“未将对象引用设置到对象实例”。
    {
      //...
    }上面已详述。这是函数封装习惯的问题。你也许会说,不可能有谁这么傻会new string[0]。但是如果那是从数据库中取出的数据或者前台输入的数据呢?
      

  21.   

    呵呵,大家既然这么严谨我就没得说了。我个人也不喜欢这种输出法。可觉得他也没必要因为这点就又改成参数输出吧?!去掉返回null的代码就是了。参数输出用起来不方便。(最起码要申明一个变量,不能像楼上那样用了)
      

  22.   

    呵呵,大家既然这么严谨我就没得说了。我个人也不喜欢这种输出法。可觉得他也没必要因为这点就又改成参数输出吧?!去掉返回null的代码就是了。参数输出用起来不方便。(最起码要申明一个变量,不能像楼上那样用了)
    =====================================================================这是很危险的错误。也许在95%的调试中不会出问题。当你Release了之后,忽然遇到空数组。客户看到一个为将对象引用设置到对象实例的莫名其妙的话,作何感想?越是小概率事件,越值得重视。因为,他们很难测试出来。
      

  23.   

    挑刺的修改之后的版本就是对的,不一定要用out。