程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中struct的2個小問題

C#中struct的2個小問題

編輯:C#入門知識

1、設置鏈表,通常代碼如下:
public struct Links
{
    public int data;
    public Links next;

上面的代碼編譯時會出錯:“Links”類型的結構成員“Links.next”在結構布局中導致循環

解決方法有2個:
a、不用struct,改用class就ok了
b、堅持使用struct,那麼需要折衷一下,加一個object成員和Links屬性來曲線救國,代碼如下:
public struct Links
{
    public int data;
    private object _next;
    public Links next
    {
        get { return (Links)_next; }
        set { _next = value; }
    }

 

2、對struct數組或類的struct成員賦值,示例代碼:
List<Links> arr = new List<Links>();
arr.Add(new Links());
arr[0].data = 123;
上面的代碼編譯時出錯:無法修改“System.Collections.Generic.List<Links>.this[int]”的返回值,因為它不是變量
出錯的原因,是因為struct是值類型,首先arr[0]返回了一個Links,返回的只是一個副本,並不是arr數組裡的0這個位置的引用,
直接對副本的data屬性進行修改,是沒有任何意義的,因為修改完成後,這個副本就被拋棄了
為了避免開發者犯這個錯誤,微軟就把它定義為編譯錯誤了,  如果是希望修改數組裡第0個元素的data屬性,代碼改成:
List<Links> arr = new List<Links>();
arr.Add(new Links());

Links tmp = arr[0];
tmp.data = 123;
arr[0].data = tmp;
上面這一步是把第0個元素直接整個替換,舊的數據等待回收中

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved