C#:如何 return 对结构的可选引用

C#: How to return optional ref to struct

在 C# 中,我如何编写一个可能 return 对结构的引用的函数?

我基本上想要的是 return 类型 Nullable<ref OutboxSlot>,但编译器抱怨 ref 收到意外标记。

我想做的是这样的:

Nullable<ref SomeFieldStruct> GetCorrectField(ref SomeStruct s) {
  // Depending on some property of s either return null or a ref to a field of s
}

在像 Rust 这样的东西中,我可以很容易地声明一个 return 类型,比如 Option<&mut SomeFieldStruct>

PS:不,我不能使用 类。

在项目属性中,在编译中,必须勾选“允许不安全代码”:

不要忘记在 Debug 和 Release 中设置。

我将使用这个结构:

public struct SomeStruct
{
    public int Value;
    public SomeFieldStruct Field;
}

public struct SomeFieldStruct
{
    public double Value;
}

然后,创建您的方法:

public unsafe static SomeFieldStruct* GetCorrectField(ref SomeStruct s)
{
    // Depending on some property of s either return null or a ref to a field of s
    if (s.Value == 0)
    {
        fixed (SomeFieldStruct* field = &s.Field)
        {
            return field;
        }
    }

    return null;
}

如果值为零,则您 return 您的结构的字段 属性 的地址。检查一下:

public unsafe static void Test()
{
    SomeStruct obj;
    obj.Value = 0;
    obj.Field.Value = 1.2;

    SomeFieldStruct* field = GetCorrectField(ref obj);
    if (field != null)
    {
        field->Value *= 10.0;
    }
}

对于指针,必须使用箭头 -> 而不是点。您所有的不安全方法都必须包含不安全关键字。