.net 无法获取托管类型(';类型名称';)的地址、大小或声明指向该类型的指针

.net 无法获取托管类型(';类型名称';)的地址、大小或声明指向该类型的指针,.net,pointers,string,struct,.net,Pointers,String,Struct,如果我的结构中有一个或多个System.String,则此错误将停止编译 还有其他方法存储字符串吗 我尝试过这样的事情: private long _B_ID; private byte[] _C_Name; private byte[] _C_Address; private byte[] _C_Telephone; 但它似乎不起作用。尝试MarshalAs属性: struct Foo { [MarshalAs(UnmanagedType.LPStr] string s; }

如果我的结构中有一个或多个System.String,则此错误将停止编译
还有其他方法存储字符串吗

我尝试过这样的事情:

private long _B_ID;
private byte[] _C_Name;
private byte[] _C_Address;
private byte[] _C_Telephone;

但它似乎不起作用。

尝试
MarshalAs
属性:

struct Foo
{
    [MarshalAs(UnmanagedType.LPStr]
    string s;
}

即使使用“不安全”,也不能声明指向非固定类型的指针。若要删除此错误,必须指定数组的大小以及关键字fixed

例如,_C_Name包含25个字节。因此,声明如下:

private fixed byte _C_Name[25];
字符串是固定类型的,所以当您将它们声明为字符串时不会出现错误。 希望它对你有用


问候

只有当结构可blittable(即不包含引用)时,才能获取该结构的地址。

请参见

您对结构做了什么?需要更多信息…@n535:这是第一个代码,我问题中的代码是第二个。@Konrad Rudolph:我正在从UdpClient获取它们,将它们复制到非托管内存并尝试将它们转换为真正的结构。你能更具体一点吗?@n535:我停止使用指针,我正在使用System.Runtime.Formatters.Binary.BinaryFormatter.并以超快的速度享受乐趣。这是否可能使用泛型。我有一个应用了
struct
类型约束的泛型类
MyClass
,并进行了额外的运行时检查,以将
限制为原语整型和浮点型。在一个不安全的方法中,我想将
void*
转换为
fixedt[]
。有没有办法绕过编译时限制?