草庐IT

汇编移位指令

全部标签

c# - C# 中跨不同文件的预处理器指令

我知道我可以在C#中使用预处理器指令来启用/禁用部分代码的编译。如果我在同一个文件中定义一个指令,它工作正常:#defineLINQ_ENABLEDusingSystem;usingSystem.Collections.Generic;#ifLINQ_ENABLEDusingSystem.Linq;#endif现在,我习惯于在C++中将所有这些配置指令放在一个头文件中,并将其包含在我需要此类指令的所有文件中。如果我在C#中做同样的事情,有些东西不起作用://Config.cs#defineLINQ_ENABLED//MyClass.cs#defineLINQ_ENABLEDusingS

c# - 序列化对象时省略 XML 处理指令

我在C#VS2003/.Net1.1应用程序中序列化一个对象。但是,我需要在没有处理指令的情况下对其进行序列化。XmlSerializer类输出如下内容:DataMoreData有没有办法得到类似下面的东西,而不用处理结果文本来删除标签?DataMoreData对于那些好奇的人,我的代码看起来像这样......XmlSerializerserializer=newXmlSerializer(typeof(MyObject));StringBuilderbuilder=newStringBuilder();using(TextWriterstringWriter=newStringWri

c# - 为什么为泛型发出 'box' 指令?

这是一个相当简单的泛型类。泛型参数被限制为引用类型。IRepository和DbSet也包含相同的约束。publicclassRepository:IRepositorywhereTEntity:class,IEntity{protectedreadonlyDbSet_dbSet;publicvoidInsert(TEntityentity){if(entity==null)thrownewArgumentNullException("entity","Cannotaddnullentity.");_dbSet.Add(entity);}}编译后的IL包含box指令。这是发布版本(调试

c# - 在 SQL Server 中反汇编位标志枚举

我在SQLServer数据库中有一个INT列,它存储与位标志枚举相关的值。例如,如果枚举是:[Flags()]publicenumUserType{StandardUser=1,Admin=2,SuperUser=4}那么SQLServer中的列可能包含值5。我需要做的是从另一个表中选择包含有关UserType的额外详细信息的所有行,因此使用值5的示例,我想从ID为1和4的第二个表。有谁知道以这种方式分解数字的巧妙方法-理想情况下,该方法应该在某种程度上递归,因为这是一个非常简化的示例,并且实际的表/枚举要大得多。 最佳答案 获取设

c# - 为什么要移位?

我最近在查看一个保存了一些神秘值的配置文件。我碰巧有可用的源代码,所以我看了一下它在做什么,它保存了一堆不同的值并将它们相互移位。这让我感到困惑,为什么有人会那样做。那么我的问题是:以这种方式存储数字数据是否有明显的优势?我可以看到它如何使按字节存储的值稍微小一些,但要节省几个字节的存储空间似乎需要做很多工作。它也似乎会慢得多。我想到的另一种可能性是它被用于混淆目的。这是位移位的常见用法吗? 最佳答案 这是位移位的常见用法之一。有几个好处:1)移位操作很快。2)您可以在单个值中存储多个标志。如果您的应用具有多项功能,但您只想启用某些

c# - VB.NET 和 C# 之间的二进制移位差异

我刚刚在翻译一些数据之间发现了一个有趣的问题:VB.NET:CByte(4)返回4但是C#:(byte)4返回1024也就是说,为什么VB.NET:(CByte(4)返回类型{Name="Byte"FullName="System.Byte"}然而C#:((byte)4返回类型{Name="Int32"FullName="System.Int32"}这两个将二进制移位视为相同的原因吗?接下来,是否有任何方法可以使C#移位执行与VB.NET相同(要使VB.NET像C#一样执行,您只需执行CInt(_____))? 最佳答案 根据htt

c# - 以编程方式反汇编 CIL

我可以将指令编译为字节码,甚至可以轻松执行它们,但我发现提取CIL的唯一函数是GetILAsByteArray,顾名思义,它只返回字节而不是CIL指令。那么如何在.NET上以编程方式反汇编CIL?请注意,我不希望结果采用人类可读的形式。我想编写元程序来操纵从其他程序生成的CIL。 最佳答案 您只需使用GetILAsByteArray方法中的字节数组就可以走得相当远,但是您需要自己编写字节解析(如果您不想依赖第3方库).数组的结构是,有一个或两个字节标识指令,后跟指令的操作数(什么都没有,一些4字节标记或8字节数字)。要获取代码,您可

c# - 删除不必要的命名空间(使用)指令是否有性能提升?

我的类中有多少using编译器指令重要吗?删除那些不必要的东西会提高性能吗?虽然我喜欢编写精简的代码,但有时代码段会被修改,并且没有机会返回并检查所有包含的命名空间是否真的有必要。或者,我不会返回并删除那些由VisualStudio自动插入的内容。即:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Mvc;谢谢! 最佳答案 不,没有性能优势。编译器不会为using语句生成IL(可执行代码)。IL仅

c# project-wide 使用别名指令

C#有一个叫做Usingaliasdirectives的特性.他们允许你做一个像这样的类型的别名:usingCustomerId=MyComp.MyProject.Core.EntityKey;然而,此功能仅适用于每个文件。我正在寻找一种方式-任何方式-在整个项目甚至整个解决方案范围内执行此操作。我想这样做的原因是因为我想删除像EntityKey这样的文字的冗长,EntityKey等。我喜欢避免在每个文件中定义这些别名。EntityKey是struct,所以我无法创建派生类。 最佳答案 不,那不存在。别名严格针对每个文件。

c# - 如何强制缩进 C# 条件指令?

在VisualStudio中编辑->高级->格式化文档后,是否有一个选项可以禁用#if、#endif和其他指令不缩进?谢谢! 最佳答案 看StyleCop.StyleCopanalyzesC#sourcecodetoenforceasetofstyleandconsistencyrules.ItcanberunfrominsideofVisualStudioorintegratedintoanMSBuildproject.StyleCophasalsobeenintegratedintomanythird-partydevelopm