加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在通用列表中获取类型的字节大小?

发布时间:2020-12-15 06:20:44 所属栏目:百科 来源:网络整理
导读:我有这个通用列表,我想得到类型的字节大小,如T是字符串或int等,我尝试两种方式写成getByteSize(),只是为了让你知道我只使用一种方法一个时间… 但是当我尝试编译时,它会出现一个错误,说“错误:类型或命名空间名称”typeParameterType“无法找到(您是否缺少u
我有这个通用列表,我想得到类型的字节大小,如T是字符串或int等,我尝试两种方式写成getByteSize(),只是为了让你知道我只使用一种方法一个时间…

但是当我尝试编译时,它会出现一个错误,说“错误:类型或命名空间名称”typeParameterType“无法找到(您是否缺少using指令或程序集引用?)”

public class iList<T> : List<T> 
    { 
        public int getByteSize ()
        {
            // way 1
            Type typeParameterType = typeof(T);
            return sizeof(typeParameterType);

            // way 2
            Type typeParameterType = this.GetType().GetGenericArguments()[0];
            return sizeof(typeParameterType);
        }
    }

并想到我在这里做错什么?

解决方法

sizeof只能在价值类型上工作.

对于字符串,您将不会知道实际的字节大小,直到您填充它.

如果你这样做,序列化列表然后测量.虽然不是一个保证的方式,它可能比替代品更好.抓住那个如果没有一点真正的努力,它不会让你得到你想要的东西.你可以像这样执行一个快速和脏的计数:

public int getListSize()
{
    Type type = typeof(T);

    if (type.IsEnum)
    {
        return this.Sum(item => Marshal.SizeOf(Enum.GetUnderlyingType(type)));
    }
    if (type.IsValueType)
    {
        return this.Sum(item => Marshal.SizeOf(item));
    }
    if (type == typeof(string))
    {
        return this.Sum(item => Encoding.Default.GetByteCount(item.ToString()));
    }
    return 32 * this.Count;
}

如果你真的想了解更多的大小,这里是一个comprehensive answer的话题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读