在不使用不安全的情况下将int分配给struct对象

Tyl*_*den 3 c# unsafe structure

我在c#中有一个struct定义,如下所示

public struct test                                                                                  
{
    byte   SetCommonPOP;
    byte   SetCommonSVP;
    byte   SetCommonUHDP;
    byte   SetCommonMHDP;
};
Run Code Online (Sandbox Code Playgroud)

如何在不使用不安全的情况下将int y分配给此结构的对象x?

Jon*_*eet 8

您可以编写自定义转换运算符:

public struct Test
{
    private readonly byte pop;
    private readonly byte svp;
    private readonly byte uhdp;
    private readonly byte mhdp;

    // TODO: Properties to return the above

    public Test(byte pop, byte svp, byte uhdp, byte mhdp)
    {
        this.pop = pop;
        this.svp = svp;
        this.uhdp = uhdp;
        this.mhdp = mhdp;
    }

    public static implicit operator Test(int value)
    {
        // Working from most significant to least significant bits...
        byte mhdp = (byte) ((value >> 0) & 0xff);
        byte uhdp = (byte) ((value >> 8) & 0xff);
        byte svp = (byte) ((value >> 16) & 0xff);
        byte pop = (byte) ((value >> 24) & 0xff);
        return new Test(pop, svp, uhdp, mhdp);
    }
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我更喜欢静态FromInt32方法而不是隐式操作符,但这是你的调用.很可能你不需要& 0xff转换中的所有部分 - 如果你使用的是uint代替的话,我也不会打扰它们int.提取有符号整数的部分只会让我感到抽搐,这可能是过度补偿.另一个替代方案是将valuea uint作为局部变量的转换开始.