C#自定义类 A
public class a
{
public int A{get;set;}
public int A_1{get;set;}
}
定义一个a的数组
a[] xx=new a[10];
这个时候xx中的元素全是null;
请问怎样写类 a能实现像
string []xx=new string[10];
这样的定义好之后就是给了默认初始化值得呢?C#

解决方案 »

  1.   

    string也是引用类型,你没赋值,当然为null了。
      

  2.   

    额 我是说string []xx=new string[10];
    不进行初始化 它的元素自己就是进行初始化了的值是"" 因为可以直接xx[0]="aaa";来赋值但是自定义的那个a[]xx=new a[10];如果直接用xx[0].A=0;来赋值的话 就会报错;因为这是xx中的元素指向的是null 有什么办法让a也像string 那样呢?给个默认的数组初始化值
      

  3.   

    你把下面这段代码,放到程序中单步调试一下,看看是否你说的那样。
     class Program
        {
            static void Main(string[] args)
            {
                string[] yy = new string[10];
                a[] xx = new a[10];
                xx[0] = new a();
            }
        }    public class a
        {
            public int A { get; set; }
            public int A_1 { get; set; }
        }
      

  4.   

    额 我是说string []xx=new string[10];
    不进行初始化 它的元素自己就是进行初始化了的值是"" 因为可以直接xx[0]="aaa";来赋值但是自定义的那个a[]xx=new a[10];如果直接用xx[0].A=0;来赋值的话 就会报错;因为这是xx中的元素指向的是null 有什么办法让a也像string 那样呢?给个默认的数组初始化值
    string a=null;
    a="adfsdf";
    这样会怎么样呢,你测试一下
      

  5.   

    public static T[] CreateArrayInstance<T>(int upperBound) where T : new()
    {
        var result = new T[upperBound];
        for (var i = 0; i < upperBound; i++)
            result[i] = new T();
        return result;
    }
      

  6.   

    实际上,在应用中我们更多是基于 IEnumeable<T> 来设计程序,而不是纠结于什么 [] 数组。我想你这样计较 string []xx=new string[10] 这个语法如何如何的话,会把一大把时光都用于死抠那么几段代码上,而不能很好地接受c#、接受.net。
      

  7.   

    string 在没有引用的时候本身就是个值类型,它的默认值就是"",所以不存在null,你创建string数组的时候并没有像你说的那样直接初始化string数组的所有对象。
    当年给string对象做引用的时候(也就是xx[0]="abc"),它就是个引用类型。
    不要太纠结这个。
     
    你只要知道,类型a就不是string那样的既是值类型也是引用类型,类型a本身只能是引用类型,如果不做引用或者初始化就会返回默认值null,所以在创建的时候必须一个一个初始化。
    如果你不想一个一个来,那就用for循环初始化吧。
      

  8.   

    引用类型默认值都是null。可以尝试把a的类型改成struct
      

  9.   

    这就一个油漆工  -->  这就像一个油漆工c#虽然有各种转换和方便扩展(貌似)语法糖的机制,但是不可能面面俱到。在最基本的new语句上死抠,这是没有必要的。实际上就算回字有4种写法,我们知道一种也就够了。
      

  10.   

    同意 最好别用数组 会经常遇到溢出的问题 Net2.0 中很多泛型集合挺好的