Struct与赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Collections.Generic;
 
struct SomeStruct
{
    public int SomeValue;
}
 
class SomeContainerClass
{
    public SomeStruct Struct;
}
 
struct SomeContainerStruct
{
    public SomeStruct Struct;
}
 
class Program
{
    static void Main()
    {
        TestStruct();
        TestClass();
        TestArray();
        TestList();
 
        Console.ReadKey();
    }
 
    static SomeStruct GetDefaultValue()
    {
        return new SomeStruct { SomeValue = 100 };
    }
 
 
    private static void TestStruct()
    {
        ShowTestName("TestStruct:");
        var c = new SomeContainerStruct { Struct = GetDefaultValue() };
        ShowResult("original:", c.Struct.SomeValue);
 
        var s = c.Struct;
        s.SomeValue = 200;
        ShowResult("indirectly:", c.Struct.SomeValue);
 
        c.Struct.SomeValue = 300;
        ShowResult("directly:", c.Struct.SomeValue);
    }
 
    private static void TestClass()
    {
        ShowTestName("TestClass:");
        var c = new SomeContainerClass { Struct = GetDefaultValue() };
        ShowResult("original:", c.Struct.SomeValue);
 
        var s = c.Struct;
        s.SomeValue = 200;
        ShowResult("indirectly:", c.Struct.SomeValue);
 
        c.Struct.SomeValue = 300;
        ShowResult("directly:", c.Struct.SomeValue);
    }
 
    private static void TestArray()
    {
        ShowTestName("TestArray:");
        var c = new[] { GetDefaultValue() };
        ShowResult("original:", c[0].SomeValue);
 
        var s = c[0];
        s.SomeValue = 200;
        ShowResult("indirectly:", c[0].SomeValue);
 
        c[0].SomeValue = 300;
        ShowResult("directly:", c[0].SomeValue);
    }
 
    private static void TestList()
    {
        ShowTestName("TestList:");
        var c = new List<SomeStruct> { GetDefaultValue() };
        ShowResult("original:", c[0].SomeValue);
 
        var s = c[0];
        s.SomeValue = 200;
        ShowResult("indirectly:", c[0].SomeValue);
 
        //the follow line won't compile
        //Cannot modify the return value of 'System.Collections.Generic.List<StructTest.SomeStruct>.this[int]' because it is not a variable
        //c[0].SomeValue = 300;
        //ShowTestName("directly:", c[0].SomeValue);
    }
 
 
    static void ShowResult(string condition, int value)
    {
        Console.Write(condition);
        Console.Write("\t");
        Console.WriteLine(value);
    }
 
    static void ShowTestName(string message)
    {
        Console.WriteLine();
        Console.WriteLine(message);
    }
 
}

posted on   deerchao  阅读(2891)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2010年1月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6

统计

点击右上角即可分享
微信分享提示