gpt4 book ai didi

C#:在运行时获取值类型变量的大小?

转载 作者:IT王子 更新时间:2023-10-29 04:31:56 26 4
gpt4 key购买 nike

我知道 C 和 C++ 等语言允许在运行时使用 sizeof() 函数确定数据(结构、数组、变量...)的大小。我在 C# 中尝试过,显然它不允许将变量放入 sizeof() 函数,但只能输入类型定义(float、byte、Int32、uint 等),我应该怎么做?

实际上,我希望这种情况发生:

int x;
Console.WriteLine(sizeof(x)); // Output: 4

与非:

Console.WriteLine(sizeof(int)); // Output: 4

我确信在 C# 中有一些正常的方法可以在运行时获取数据的大小,但谷歌并没有提供太多帮助。这是我最后的希望

最佳答案

Cory's answer 开始,如果性能很重要并且您需要经常使用此代码,那么您可以缓存大小,这样动态方法只需要为每种类型构建和执行一次:

int x = 42;
Console.WriteLine(Utils.SizeOf(x)); // Output: 4

// ...

public static class Utils
{
public static int SizeOf<T>(T obj)
{
return SizeOfCache<T>.SizeOf;
}

private static class SizeOfCache<T>
{
public static readonly int SizeOf;

static SizeOfCache()
{
var dm = new DynamicMethod("func", typeof(int),
Type.EmptyTypes, typeof(Utils));

ILGenerator il = dm.GetILGenerator();
il.Emit(OpCodes.Sizeof, typeof(T));
il.Emit(OpCodes.Ret);

var func = (Func<int>)dm.CreateDelegate(typeof(Func<int>));
SizeOf = func();
}
}
}

关于C#:在运行时获取值类型变量的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8173239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com