自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#結(jié)構(gòu)體變量學習淺談

開發(fā) 后端
C#結(jié)構(gòu)體變量學習中的一點體會和大家一起分享下,C#結(jié)構(gòu)體變量學習會遇到些什么問題呢?本文向你一一介紹。

C#結(jié)構(gòu)體變量的內(nèi)涵:一個結(jié)構(gòu)體可以作為另一個結(jié)構(gòu)體的成員類型:

(1)C#結(jié)構(gòu)體變量示例:

  1. struct phoneBook  
  2. {  
  3.   public string name;  
  4.   public uint age;  
  5.   public string phone;  
  6.   public struct address  
  7.   {   
  8.   public string city;  
  9.   public string street;  
  10.   public uint no;  
  11.   }  

但是由一個問題:

如何對結(jié)構(gòu)的結(jié)構(gòu)體的成員賦值?

有如下C#結(jié)構(gòu)體變量示例:

  1. phoneBook M_1;  
  2. M_1.name=Console.ReadLine();  
  3. ……  
  4. M_1.address.city=Console.ReadLine();  
  5. …… 

這樣訪問的話,編譯報錯:

error CS0572:“address”:無法通過表達式引用類型,請嘗試“phoneBook.address”。

在這里M_1.address這種引用方式應(yīng)該是錯誤的,因為address僅僅是一個類型名,而不是phoneBook的成員名,所以說無法引用。

(2)C#結(jié)構(gòu)體變量示例

還嘗試另外一種方式給他賦值:

  1. phoneBook M_1;  
  2. M_1.name=Console.ReadLine();  
  3. ……  
  4. phoneBook.address ad;  
  5. ad.city=Console.ReadLine();  
  6. …… 

這樣賦值倒是沒問題,但ad和M_1有什么關(guān)系?基本是兩個不想干的對象。

這樣看來,目前還無法解決,只能在結(jié)構(gòu)體本身想辦法了。

(3)C#結(jié)構(gòu)體變量示例

那么,結(jié)構(gòu)體這樣定義如何?

  1. struct phoneBook  
  2. {  
  3.   public string name;  
  4.   public uint age;  
  5.   public string phone;  
  6.   public struct address  
  7.   {   
  8.   public string city;  
  9.   public string street;  
  10.   public uint no;  
  11.   } ad;  

注意:在聲明address類型的時候同時聲明他的對象ad作為phoneBook的成員,這在C++里應(yīng)該是沒問題的。

但還是無法通過編譯:類、結(jié)構(gòu)或接口成員聲明中的標記“;”無效

不知道為什么,可能c#不支持

(4)C#結(jié)構(gòu)體變量示例

最后一個辦法:把結(jié)構(gòu)體里的結(jié)構(gòu)體拿出來,其對象作為另一個結(jié)構(gòu)體的成員:

  1. struct phoneBook  
  2. {  
  3.   public string name;  
  4.   public uint age;  
  5.   public string phone;  
  6.   public address ad;  
  7. }  
  8. struct address  
  9. {  
  10.   public string city;  
  11.   public string street;  
  12.   public uint no;  

這樣肯定就沒問題了,但是已經(jīng)跟原來問題不大相關(guān)了。

(5)C#結(jié)構(gòu)體變量示例

經(jīng)請教,得知可以這樣寫:

  1. struct phoneBook  
  2. {  
  3.   public string name;  
  4.   public uint age;  
  5.   public string phone;  
  6.   public address ad;  
  7.   public struct address  
  8.   {  
  9.   public string city;  
  10.   public string street;  
  11.   public uint no;  
  12.   }  
  13. }  

其實,這就是方式(3)所要做的

只是方式(3)是c++的方法在C#里不起作用而已,其實質(zhì)和方式(4)卻相同。

下面是所有代碼,作為參考:

C#結(jié)構(gòu)體變量示例之版本2代碼

  1. using System;  
  2.  
  3. struct phoneBook  
  4. {  
  5.   public string name;  
  6.   public uint age;  
  7.   public string phone;  
  8.   public address ad;  
  9. }  
  10. struct address  
  11. {  
  12.   public string city;  
  13.   public string street;  
  14.   public uint no;  
  15. }  
  16.  
  17. class Welcome  
  18. {  
  19.   static void Main()  
  20.   {  
  21.      
  22.   try 
  23.   {  
  24.   phoneBook M_1;  
  25.   while (true)  
  26.   {  
  27.   Console.WriteLine("請輸入你的姓名:");  
  28.   M_1.name = Console.ReadLine();  
  29.   if (M_1.name != "")  
  30.   break;  
  31.   else 
  32.   {  
  33.   Console.WriteLine("請輸入!");  
  34.   }  
  35.   }  
  36.  
  37.   while (true)  
  38.   {  
  39.   try 
  40.   {  
  41.   Console.WriteLine("請輸入你的年齡:");  
  42.   M_1.age = Convert.ToUInt32(Console.ReadLine());  
  43.   break;  
  44.   }  
  45.   catch (FormatException e)  
  46.   {  
  47.   Console.WriteLine("請輸入-9的數(shù)字!");  
  48.   }  
  49.   }  
  50.  
  51.   while (true)  
  52.   {  
  53.   Console.WriteLine("請輸入你的電話:");  
  54.   M_1.phone = Console.ReadLine();  
  55.   if (M_1.phone != "")  
  56.   break;  
  57.   else 
  58.   {    
  59. Console.WriteLine("請輸入!");  
  60.   }  
  61.   }  
  62.  
  63.   Console.WriteLine("請輸入你的住址:");    
  64.   while (true)  
  65.   {  
  66.   Console.WriteLine("請輸入你的城市:");  
  67.   M_1.ad.city = Console.ReadLine();  
  68.   //M_1.address.city=Console.ReadLine();  
  69. //通過此種方式無法直接訪問結(jié)構(gòu)體address的成員    
  70.   if (M_1.ad.city != "")  
  71.   break;  
  72.   else 
  73.   {  
  74.   Console.WriteLine("請輸入!");  
  75.   }  
  76.   }  
  77.  //C#結(jié)構(gòu)體變量
  78.   while (true)  
  79.   {  
  80.   Console.WriteLine("請輸入你的街道:");  
  81.   M_1.ad.street = Console.ReadLine();  
  82.   if (M_1.ad.street != "")  
  83.   break;  
  84.   else 
  85.   {  
  86.   Console.WriteLine("請輸入!");  
  87.   }  
  88.   }  
  89.  
  90.   while (true)  
  91.   {  
  92.   try 
  93.   {  
  94.   Console.WriteLine("請輸入你的門牌號:");  
  95.   M_1.ad.no = Convert.ToUInt32(Console.ReadLine());    
  96.   break;  
  97.   }  
  98.   catch (FormatException e)  
  99.   {  
  100.   Console.WriteLine("請輸入-9的數(shù)字!");  
  101.   }  
  102.   }  
  103.   Console.WriteLine("OK now……"); Console.WriteLine(  
  104. "------------------------------------------  
  105. ---------------------------------");  
  106.   Console.WriteLine("你的信息如下:\n");  
  107.   Console.WriteLine(" 姓名: {0}",M_1.name);  
  108.   Console.WriteLine(" 年齡: {0}",M_1.age);  
  109.   Console.WriteLine(" 電話: {0}",M_1.phone);  
  110.   Console.WriteLine(" 住址: {0}市{1}街{2}號",  
  111. M_1.ad.city,M_1.ad.street,M_1.ad.no);  
  112.   }  
  113.   catch(FormatException e/*,IOException i*/)  
  114.   {  
  115.   string msg = "\n--------------  
  116. --------------------------------------  
  117. ---------------------\n錯誤:\n 源 :"+e.Source +  
  118. "\n 消息:"+ e.Message+"\n 追蹤:\n"+e.StackTrace;  
  119.   Console.WriteLine(msg);  
  120.   }  
  121.  }   

C#結(jié)構(gòu)體變量示例之版本3代碼:

  1. using System;  
  2. using System.IO;  
  3.  
  4. struct phoneBook  
  5. {  
  6.   public string name;  
  7.   public uint age;  
  8.   public string phone;  
  9.   public address ad;  
  10.   public struct address  
  11.   {  
  12.   public string city;  
  13.   public string street;  
  14.   public uint no;  
  15.   }  
  16. }  
  17.  
  18. class Welcome  
  19. {  
  20.   static phoneBook PB;  
  21.   static string info="見到這條消息說明你是笨蛋";  
  22.   static string write_info = "CUG來客";  
  23.   static string fileName = "信息記錄.txt";  
  24.  
  25.   static void outMsg(int flag)//輸出信息到控制臺  
  26.   {  
  27.   Console.ForegroundColor = ConsoleColor.Green;  
  28.   switch (flag)  
  29.   {  
  30.   case 0:  
  31.   {  
  32.   Console.ForegroundColor = ConsoleColor.Red;  
  33.   //Console.BackgroundColor = ConsoleColor.White;  
  34. Console.WriteLine("\n\n 2008世紀通訊錄 ");  
  35.   Console.WriteLine("_________________________  
  36. _____________________________________________________\n");  
  37.   Console.WriteLine("錄入信息(I):");  
  38.   Console.WriteLine("查看記錄(V):");  
  39.   Console.WriteLine("退出系統(tǒng)(E):");  
  40.   break;  
  41.   }  
  42.   case 1:  
  43.   {  
  44.   Console.WriteLine("請輸入!");  
  45.   break;  
  46.   }  
  47.   case 2:  
  48.   {  
  49.   Console.WriteLine("請輸入-9的數(shù)字!");  
  50.   break;  
  51.   }  
  52.   case 3:  
  53.   {  
  54.   Console.ForegroundColor = ConsoleColor.Magenta;  
  55.   Console.WriteLine("-------  
  56. --------------------------------------------");  
  57.   Console.WriteLine(info);  
  58.   break;  
  59.   }  
  60.   case 4:  
  61.   {  
  62.   Console.WriteLine("讀取文件錯誤!");  
  63.   break;  
  64.   }  
  65.   case 5:  
  66.   {  
  67.   Console.WriteLine("寫文件錯誤!");  
  68.   break;  
  69.   }  
  70.   case 6:  
  71.   {  
  72.   Console.WriteLine("非法字符!");  
  73.   break;  
  74.   }  
  75.   case 7:  
  76.   {  
  77.   Console.WriteLine("操作成功!");  
  78.   break;  
  79.   }  
  80.   default:  
  81.   break;  
  82.   }  
  83.   Console.BackgroundColor = ConsoleColor.Black;  
  84.   Console.ForegroundColor = ConsoleColor.White;  
  85.   }   
  86.   static void writeFile(phoneBook pb) //將信息輸出到文件保存  
  87.   {  
  88.   try 
  89.   {  
  90.   StreamWriter w = File.AppendText(fileName);  
  91.   /*FileStream f_stream=new   
  92. FileStream(filename,FileMode.OpenOrCreate);  
  93.   StreamWriter swd = new StreamWriter(f_stream);  
  94.   swd.WriteLine(info);*/ 
  95.   /*BinaryWriter bwd = new BinaryWriter(f_stream);  
  96.   bwd.WriteString(info);*/ 
  97.   w.WriteLine(Environment.NewLine); w.WriteLine("///  
  98. ////////////////////////////////////////////////////////////////");  
  99.   w.Write(write_info);  
  100.   w.WriteLine(Environment.NewLine);  
  101.   w.Close();  
  102.   outMsg(7);  
  103.   }  
  104.   catch (IOException e)  
  105.   {  
  106.   outMsg(4);  
  107.   string msg = "\n----------  
  108. ---------------------------------------------------------------  
  109. \n錯誤:\n 源 :" + e.Source + "\n 消息:" +  
  110.  e.Message + "\n 追蹤:\n" + e.StackTrace;  
  111.   Console.WriteLine(msg);  
  112.   }  
  113.   }  
  114.   static void inPut(ref phoneBook pb)//從控制臺輸入信息  
  115.   {  
  116.   try 
  117.   {  
  118.   while (true)  
  119.   {  
  120.   Console.WriteLine("請輸入你的姓名:");  
  121.   pb.name = Console.ReadLine();  
  122.   if (pb.name != "")  
  123.   break;  
  124.   else 
  125.   {  
  126.   outMsg(1);  
  127.   }  
  128.   }  
  129.  
  130.   while (true)  
  131.   {  
  132.   try 
  133.   {  
  134.   Console.WriteLine("請輸入你的年齡:");  
  135.   pb.age = Convert.ToUInt32(Console.ReadLine());  
  136.   break;  
  137.   }  
  138.   catch   
  139.   {  
  140.   outMsg(2);  
  141.   }  
  142.   }  
  143.  
  144.   while (true)  
  145.   {  
  146.   Console.WriteLine("請輸入你的電話:");  
  147.   pb.phone = Console.ReadLine();  
  148.   if (pb.phone != "")  
  149.   break;  
  150.   else 
  151.   {  
  152.   outMsg(1);  
  153.   }  
  154.   }  
  155.  
  156.   Console.WriteLine("請輸入你的住址:");    
  157.   while (true)  
  158.   {  
  159.   Console.WriteLine("請輸入你的城市:");  
  160.   pb.ad.city = Console.ReadLine();  
  161.   if (pb.ad.city != "")  
  162.   break;  
  163.   else 
  164.   {  
  165.   outMsg(1);  
  166.   }  
  167.   }  
  168.  
  169.   while (true)  
  170.   {  
  171.   Console.WriteLine("請輸入你的街道:");  
  172.   pb.ad.street = Console.ReadLine();  
  173.   if (pb.ad.street != "")  
  174.   break;  
  175.   else 
  176.   {  
  177.   outMsg(1);  
  178.   }  
  179.   }  
  180.  //C#結(jié)構(gòu)體變量
  181.   while (true)  
  182.   {  
  183.   try 
  184.   {  
  185.   Console.WriteLine("請輸入你的門牌號:");  
  186.   pb.ad.no = Convert.ToUInt32(Console.ReadLine());    
  187.   break;  
  188.   }  
  189.   catch   
  190.   {  
  191.   outMsg(2);  
  192.   }  
  193.   }  
  194.  //C#結(jié)構(gòu)體變量
  195. info = "你的信息如下:\r\n" +  
  196.  " 姓名: " + pb.name + "\r\n 年齡: " + pb.age + "\r\n    
  197. 電話: " + pb.phone + "\r\n 住址:   
  198. " + pb.ad.city + "市" + pb.ad.street +  
  199. "街" + pb.ad.no + "號";  
  200.   write_info = "姓名: " + pb.name +   
  201. "\r\n年齡: " + pb.age + "\r\n電話: " + pb.phone +   
  202. "\r\n住址: " + pb.ad.city + "市" +   
  203.  
  204. pb.ad.street + "街" + pb.ad.no + "號";  
  205.   }  
  206.   catch (FormatException e/*,IOException i*/)  
  207.   {  
  208.   string msg = "\n---------------  
  209. ----------------------------------------------------------\n  
  210. 錯誤:\n 源 :" + e.Source + "\n 消息:" +   
  211. e.Message + "\n 追蹤:\n" + e.StackTrace;  
  212.   Console.WriteLine(msg);  
  213.   }  
  214.   }   
  215.   static void readFile(phoneBook pb)//從文件讀取信息  
  216.   {  
  217.   try 
  218.   {  
  219.   StreamReader srd = File.OpenText(fileName);  
  220.   string str;  
  221.   int count=0;//記錄信息的條數(shù)  
  222.   while(srd.Peek()>=0)  
  223.   {  
  224.   str = srd.ReadLine();  
  225.   if (str.Contains("姓名"))//以出現(xiàn)姓名為標志,處理條數(shù)記錄  
  226.   {  
  227.   count++;  
  228.   }  
  229.   Console.WriteLine(str);  
  230. //在此處僅僅是將讀取的字符串輸出,  
  231.  
  232. //其實還可以做進一步的處理,得到一個phoneBook  
  233. //結(jié)構(gòu)做其他用處,這也是最初的目的,但由于時間原因,也就罷了。  
  234.   }  
  235.   Console.WriteLine(Environment.NewLine);  
  236.   Console.WriteLine("-----------------  
  237. -----------------------------------------");  
  238.   Console.WriteLine("目前共有{0}條記錄", count);  
  239.   srd.Close();  
  240.   }  
  241.   catch 
  242.   {  
  243.   outMsg(6);  
  244.   }  
  245.   }  
  246.   static void Main()  
  247.   {  
  248.   do 
  249.   {  
  250.   outMsg(0);    
  251.   char choice = Console.ReadKey().KeyChar;  
  252.   Console.WriteLine("\r\n");  
  253.   switch (choice)  
  254.   {  
  255.   case 'i':  
  256.   case 'I'//輸入信息  
  257.   {  
  258.   inPut(ref PB);  
  259.   outMsg(3);  
  260.   writeFile(PB);  
  261.   break;  
  262.   }  
  263.   case 'v':  
  264.   case 'V'//查看記錄  
  265.   {  
  266.   //Console.WriteLine("查看記錄");  
  267.   readFile(PB);  
  268.   break;  
  269.   }  
  270.   case 'e':  
  271.   case 'E'//退出系統(tǒng)  
  272.   {  
  273.   Console.WriteLine("機器名 :{0} \r\n  
  274. OS版本 :{1} \r\n運行時間:{2}毫秒",   
  275. Environment.MachineName, Environment.OSVersion,  
  276.  Environment.TickCount);  
  277.   Console.WriteLine("退出系統(tǒng)");  
  278.   Environment.Exit(0);  
  279.   //Application.Exit();  
  280.   break;  
  281.   }  
  282.   default:  
  283.   {  
  284.   outMsg(6);  
  285.   break;  
  286.   }  
  287.   }  
  288.   } while (true);  
  289.   }  

C#結(jié)構(gòu)體變量的基恩內(nèi)容就向你介紹到這里,希望對你學習和了解C#結(jié)構(gòu)體變量有所幫助。

【編輯推薦】

  1. C#構(gòu)造函數(shù)介紹及分類淺析
  2. C#結(jié)構(gòu)體和類的區(qū)別淺析
  3. C#結(jié)構(gòu)體構(gòu)造函數(shù)的應(yīng)用
  4. C#結(jié)構(gòu)體定義的詳解
  5. C#的結(jié)構(gòu)體使用實例淺析
責任編輯:仲衡 來源: 百度空間
相關(guān)推薦

2011-09-21 10:56:31

C#結(jié)構(gòu)

2009-08-07 11:26:53

C#數(shù)組結(jié)構(gòu)

2009-08-13 13:29:04

C#結(jié)構(gòu)體使用

2009-08-27 14:44:11

C# interfac

2009-08-13 11:18:50

C#結(jié)構(gòu)體

2009-08-31 15:02:22

C#解析結(jié)構(gòu)體指針

2009-08-14 11:05:28

C#語言的結(jié)構(gòu)體

2009-08-13 14:46:03

C#結(jié)構(gòu)體定義

2009-08-27 16:18:47

C#類C#結(jié)構(gòu)體

2009-08-13 14:24:44

C#結(jié)構(gòu)體構(gòu)造函數(shù)

2009-08-13 14:56:46

C#的結(jié)構(gòu)體使用

2009-08-03 17:07:31

C#固定的和活動的變量

2009-09-04 17:44:35

2009-08-13 14:06:37

C#結(jié)構(gòu)體結(jié)構(gòu)體和類的區(qū)別

2009-08-13 13:03:52

C#結(jié)構(gòu)體數(shù)組

2009-08-13 13:17:10

C#結(jié)構(gòu)體數(shù)組

2009-08-20 18:30:33

C# ReaderWr

2009-08-13 15:41:50

C#結(jié)構(gòu)體指針

2009-08-13 14:36:40

C#結(jié)構(gòu)體構(gòu)造函數(shù)

2009-08-12 11:24:25

C# String對象
點贊
收藏

51CTO技術(shù)棧公眾號