C# 使用字典中的值类型作为值字段的类型是否有好处? struct ValueTypeObject { 私人INTX; } 类RefTypeObject { 私人INTX; } void main() { var a=新字典(); var b=新字典(); }

C# 使用字典中的值类型作为值字段的类型是否有好处? struct ValueTypeObject { 私人INTX; } 类RefTypeObject { 私人INTX; } void main() { var a=新字典(); var b=新字典(); },c#,.net,value-type,C#,.net,Value Type,使用a而不是b有什么好处吗 例如,“a”中的ValueTypeObject是否会自动装箱/取消装箱?如果值的类型已经是结构(例如int),则a肯定是有益的。除此之外,这感觉像是一个XY问题-。你为什么这么问?简短的回答通常是否定的。但是,像所有的事情一样,你需要确定它是泛型类型,特别是因为它们是泛型的。这里的重要区别不是装箱,而是dict[index].x=42以一种方式与类一起工作,与结构一起工作。在.NET中支持值类型以提高代码效率。这里也是这样,访问值的dictionary元素至少需要一次

使用a而不是b有什么好处吗


例如,“a”中的ValueTypeObject是否会自动装箱/取消装箱?如果值的类型已经是
结构(例如
int
),则a肯定是有益的。除此之外,这感觉像是一个XY问题-。你为什么这么问?简短的回答通常是否定的。但是,像所有的事情一样,你需要确定它是泛型类型,特别是因为它们是泛型的。这里的重要区别不是装箱,而是
dict[index].x=42
以一种方式与类一起工作,与结构一起工作。在.NET中支持值类型以提高代码效率。这里也是这样,访问值的dictionary元素至少需要一次内存读取,访问对象至少需要两次。额外读取造成的开销很小,因为字典的开销是高度可变的,所以不容易看到后面的内容。没有装箱,字典是通用的。这是您在这里进行分析的关键@汉帕桑是对的,没有拳击。但是如果
struct
足够大,那么复制它的开销(这是
struct
的问题,而不是
class
)可能会成为一个问题,正如西奥多所提到的。
    struct ValueTypeObject
    {
        private int x;
    }

    class RefTypeObject
    {
        private int x;
    }

    void main()
    {
        var a = new Dictionary<int, ValueTypeObject>();
        var b = new Dictionary<int, RefTypeObject>();
    }