1. 程式人生 > 其它 >C# 無法修改返回值,因為它不是變數

C# 無法修改返回值,因為它不是變數

結構體通過屬性訪問修改的時候會出現以下編譯錯誤:

▲ 錯誤提示。

結構體不能像類一樣去操作,問題可能是因為:結構體是值型別的原因。

試試結構體整體賦值

▲ 結構體整體賦值,不會編譯錯誤。

這個現象不能復現了?還沒弄清什麼原因。下面是可以執行輸出,而不報錯:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CsTestWinform
{
    static class Program
    {
        /// <summary>
        /// 應用程式的主入口點。
        /// </summary>
        [STAThread]
        static void Main()
        {
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());

            Test test = new Test() { HuObj = new Hu() { Name = "Hi", Age = 12 } };
            test.ShowHu();

            Hu hu = new Hu() { Name = "Hello", Age = 10};
            test.HuObj.Name = hu.Name;
            test.HuObj.Age = hu.Age;
            test.ShowHu();

            Console.ReadKey();
        }
    }

    public class Test
    {
        public Hu HuObj;

        public void ShowHu()
        {
            Console.WriteLine(HuObj.Name);
            Console.WriteLine(HuObj.Age.ToString());

            // 下面這樣賦值,沒有出現編譯錯誤
            HuObj.Name = "Ok";
            HuObj.Age = 1;
            Console.WriteLine(HuObj.Name);
            Console.WriteLine(HuObj.Age.ToString());
        }
    }

    public struct Hu
    {
        public string Name { get; set; }
        public int Age { get; set; }

        //public Hu(string name, int age)
        //{
        //    Name = name;
        //    Age = age;
        //}
    }
}

輸出:

Hi
12
Ok
1
Hello
10
Ok
1