小编lis*_*isz的帖子

结构指针(地址)和默认构造函数

获取C#结构的地址是否会导致默认的构造函数调用?

例如,我有这样的结构:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct HEADER {
    public byte OPCODE;
    public byte LENGTH;
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct S {
    public HEADER Header;
    public int Value;
}
Run Code Online (Sandbox Code Playgroud)

然后,当然,我不能这样做:

S s;                // no constructor call, so...
var v = s.Value;    // compiler error: use of possibly unassigned field 'Value'
Run Code Online (Sandbox Code Playgroud)

但是一旦我获得了结构的指针,我甚至可以在不使用指针的情况下读取它的字段,甚至是嵌入式结构域的字段:

S s;
S* ps = &s;
var v1 = ps->Value;        // OK, expected
var v2 = s.Value;          // OK!
var len = s.Header.LENGTH; // OK!
Run Code Online (Sandbox Code Playgroud)

那么,它是否以某种方式调用默认构造函数,或者 …

c# c#-7.3

10
推荐指数
1
解决办法
448
查看次数

c#7.2默认表达式和Equals(bug?)

我正在使用Visual Studion 2017版本15.5.2和C#版本7.2.要点:

Color c = default;                              // or: c = default(Color); no difference
Debug.Print($"{c.Equals(default(Color))}");     // true
Debug.Print($"{c.Equals(default)}");            // false WHY?!
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用ValueTuple:

(string s, int i) t = default;                  
Debug.Print($"{t.Equals(default((string, int)))}"); // true
Debug.Print($"{t.Equals(default)}");                // true
Run Code Online (Sandbox Code Playgroud)

它应该是这样的吗?

c# default valuetuple c#-7.2

4
推荐指数
3
解决办法
413
查看次数

标签 统计

c# ×2

c#-7.2 ×1

c#-7.3 ×1

default ×1

valuetuple ×1