日期:2014-05-18  浏览次数:21125 次

C#定义数组时,用指定长度吗?
我在一个类中,做了个方法,判断字符串内容方面的,希望返回某几个字符串,我定义如下
C# code

public bool isSpecialCharExist(String testStr, out String [] resultValue)
        {
            //resultValue =new string[]{"",""};一般是返回两个字符串,所以可以给两个空串,然后下面引用的时候就没有问题
            resultValue = new string[] {  };//这样不好用,提示下标超界
            String myStrForSpecial = testStr;
            int flagSpecial = myStrForSpecial.IndexOf("G");
            if (flagHdUnit != -1)
            {
                resultValue [0] = myStrForHdUnit.Substring(0,myStrForHdUnit.IndexOf("H"));//这样引用,会提示下标超界,但是,如果上面给数组 resultValue赋两个"","",就不提示。
                resultValue [1] = myStrForHdUnit.Substring(myStrForHdUnit.IndexOf("H"));//这样引用,会提示下标超界,但是,如果上面给数组 resultValue赋两个"","",就不提示。

                return true;
            }
            else
            {
                return false;
            }
        }



我在其它需要判断的地方,使用这个类的方法,
定义的时候,并没有指定长度,但是却可以正常运行

C# code

 SpecialCharExist mySCE = new SpecialCharExist();
                            String [] myRes =new string[]{};
                            bool flagEC = mySCE.isSpecialCharExist(myNeedTestStr, out myRes);
                            if (flagEC == true)
                            {
                                //执行操作;
                            }



求解,这是什么原因呢?

------解决方案--------------------
数组要么指定长度,要么给出初始化集合,相当于隐式提供长度。

最好使用List<string>,你可以不断添加元素,最后再ToArray()
类似这样:
C# code
var list = new List<string>();
list.Add("item 1");
list.Add("item 2");
string[] result = list.ToArray();

------解决方案--------------------
数组也是要指定的
------解决方案--------------------
LZ你那样是隐式指定了长度了,编译器可以通过你{}中的内容推断出长度
------解决方案--------------------
数组必须要指定长度
用泛型方式可以不指定长度 List<int> ls = new List<int>;

------解决方案--------------------
探讨

您说的List也是类似于数组吗?可以不用长度?引用:
数组要么指定长度,要么给出初始化集合,相当于隐式提供长度。

最好使用List<string>,你可以不断添加元素,最后再ToArray()
类似这样:

C# code
var list = new List<string>();
list.Ad……