检索结构的[StructLayout]属性 - c#

我想从应用于以下结构的StructLayout中获取22字节的结构大小。

[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Pack = 1, Size = 22)]
internal unsafe struct Entry
{
    [FieldOffset(0)]
    private fixed char title[14];
    [FieldOffset(14)]
    private readonly int size;
    [FieldOffset(18)]
    private readonly int start;
}

一个建议使用Marshal.SizeOf,但是它返回不希望的28字节非托管对象的大小。

int count = Marshal.SizeOf(typeof(Entry));

但是,由于数组“ customAttributes”的长度始终为0,因此似乎无法获得此属性。

var type = typeof(Entry);
var customAttributes = type.GetCustomAttributes(typeof(StructLayoutAttribute), true);

任何解决方法?

参考方案

StructLayout属性中的信息作为IL指令而不是自定义属性嵌入到方法中。要检索它,可以使用Type.StructLayoutAttribute Property:

var type = typeof(Entry);
var sla = type.StructLayoutAttribute;

另外,如果该结构在您的控制之下,则可以简单地定义一个Size常量:

[StructLayout(LayoutKind.Explicit, Pack = 1, Size = Entry.Size)]
internal unsafe struct Entry
{
    public const int Size = 22;
    ...

如何获得与.NET属性关联的类/属性/等? - c#

如果我将自定义属性应用于类,例如:[Foo] class Bar {} 很明显,当我检索我的Foo属性实例时,它与Bar关联。在Foo实现内部,在ctor中说,如何获取与属性实例相关联的类?到目前为止,我所能想到的就是将其放入属性的ctor中:[Foo(typeof(Bar)] class Bar {} 这似乎太多余了。 参考方案 您必须传递它。请参阅此答案…

Java中的python struct.unpack - java

我对Python很陌生,一直在尝试在Java中移植python脚本。一段时间以来,我一直坚持下面的代码逻辑,试图将其转换为Java,但未能这样做(可能是因为我误解了实际所做的事情)data = unpack('>H', file.read(2)) if data == 0xffff then //do something else …

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可