C# 如何使用类型安全性装箱和取消装箱结构

C# 如何使用类型安全性装箱和取消装箱结构,c#,struct,thread-safety,type-safety,boxing,C#,Struct,Thread Safety,Type Safety,Boxing,在.NET平台中有一个我想用作我的类的状态。结构是内置的这一点很重要,因此我无法更改它。假设此内置结构是下面的ImmutableStruct struct ImmutableStruct { public string Value { get; } public ImmutableStruct(string value) { Value = value; } } 我的类必须是线程安全的,因此必须声明状态。当然,还有其他方法可以实现线程安全,但是可以说,对于特定情况,选择了vo

在.NET平台中有一个我想用作我的类的状态。结构是内置的这一点很重要,因此我无法更改它。假设此内置结构是下面的
ImmutableStruct

struct ImmutableStruct
{
    public string Value { get; }

    public ImmutableStruct(string value) { Value = value; }
}
我的类必须是线程安全的,因此必须声明状态。当然,还有其他方法可以实现线程安全,但是可以说,对于特定情况,选择了
volatile
字段作为最佳选项。因此,我对我的类编写如下代码:

class MyClass
{
    private volatile ImmutableStruct _state = new ImmutableStruct("SomeString");
    // Error CS0677
    // 'MyClass._state': a volatile field cannot be of the type 'ImmutableStruct'

    public ImmutableStruct State => _state;

    /* Method that mutates the _state is omitted */
}
public  class ReadonlyStructWrapper<T> where T: struct 
    {
        public T Value { get; }
        public ReadonlyStructWrapper(T value)
        {
            Value = value;
        }
    }
不幸的是,编译器不允许使用
volatile
结构字段。因此,我决定使用:

这是可行的,但从对象强制转换会让我感到焦虑,因为程序可能会暴露在运行时错误中。我想要一个类型安全的解决方案,编译器确保程序在编译时的正确性。所以我的问题是:是否有任何方法可以使用类型安全性来装箱和取消装箱结构


顺便说一句,有一个关于将结构标记为volatile的相关问题:。我的问题是,它特别关注装箱/拆箱操作的类型安全性。

如何创建这样的通用包装器:

class MyClass
{
    private volatile ImmutableStruct _state = new ImmutableStruct("SomeString");
    // Error CS0677
    // 'MyClass._state': a volatile field cannot be of the type 'ImmutableStruct'

    public ImmutableStruct State => _state;

    /* Method that mutates the _state is omitted */
}
public  class ReadonlyStructWrapper<T> where T: struct 
    {
        public T Value { get; }
        public ReadonlyStructWrapper(T value)
        {
            Value = value;
        }
    }
公共类ReadonlyStructWrapper,其中T:struct
{
公共T值{get;}
公共ReadonlyStructWrapper(T值)
{
价值=价值;
}
}

谢谢斯特伦的回答。这是一个相当漂亮的解决方案!