程序一(直接对结构中的字段赋值,可以):using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace 结构
{
    struct IDCard
    {
        public  int id;
        public  string name;
        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }    
    }
    class Program
    {
        static void Main(string[] args)
        {
            IDCard idc;
            idc.id = 12345;         //直接对字段赋值
            idc.name = "张四 ";     //直接对字段赋值
            Console.WriteLine("身份证号码:{0},姓名:{1}",idc .Id ,idc .Name );
            Console.ReadKey();        
        }
    }
}运行结果:
身份证号码:12345,姓名:张四程序二(直接对结构中的属性赋值,出错):using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace 结构
{
    struct IDCard
    {
        public  int id;
        public  string name;
        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }    
    }
    class Program
    {
        static void Main(string[] args)
        {
            IDCard idc;
            idc.Id = 12345;         //直接对属性赋值
            idc.Name = "张四 ";            //直接对属性赋值
            Console.WriteLine("身份证号码:{0},姓名:{1}",idc .Id ,idc .Name );
            Console.ReadKey();        
        }
    }
}出错提示:
内容:Use of unassigned local variable 'idc' 行数:(上面带下划线的一行)求解释。

解决方案 »

  1.   

    补充:程序二中出错的一行是 idc.Id = 12345;         //直接对属性赋值
    (不知道为什么帖子中的下划线没有显示出来?)
      

  2.   

    IDCard idc = new IDCard();
      

  3.   

    我觉得结构如果声明时不用 new 实例化,在给公共字段赋值时就自动实例化了。
    属性等同于方法,直接调用方法并不会实例化它,而如果先给字段赋值,再调用方法就可以的了。
      

  4.   

    接4楼,而且是所有字段都要赋值,如果有私有字段就只能 new 了
      

  5.   


    根据我的理解,确实是分配了空间,但如果不显示调用new,空间并没有“清理”成各字段的初始值。在这种情况下,你直接call里面的方法或属性会报未初始化错。
      

  6.   

    // 这样可以
    IDCard idc1;
    idc1.id = 12345;
    idc1.name = "x";
    idc1.Name = "a";// 这样就不可以
    IDCard idc2;
    idc2.name = "x";
    idc2.Name = "a";
      

  7.   

    表赞同四楼struct可以不使用 new关键字,如果不以 new来实
    例化struct,则其所有的字段将处于未分配状态,直到所有字段完成初始化,否则引用
    未赋值的字段会导致编译错误。
      

  8.   


    因为你的[u]是写在C#code中的,所以。。俄。。