Tag: 标志

使用64位有符号值在SQL和C#中模拟128位无符号整数?

采取这种情况:您在C#中绑定了一些标记枚举(实际上是从SQL Server中的Enum-ish表生成)。 假设您是经销商,并允许您的经销商指定他们发货的美国州。 作为一名出色而优雅的软件工程师,您将这些作为可按位组合的标志值实现以节省存储: create table USState ( StateID bigint, StateAbbr char(2), StateName varchar(50)) /* insert all US States + DC into USState, StateIDs must be in powers of two */ /* StateID 0 reserved for ‘None’: */ create procedure GetStatesByFlag (@StateFlags bigint) as declare @StateIDs table ( StateID bigint, primary key (StateID) ) insert […]

使用属性定义C#枚举的多种方法?

我理解Enums如何在C#中工作,我得到了Flags属性带给表的内容。 我在这里看到了这个问题。 其中推荐了第一种口味,但没有提供任何理由/理由。 两者的定义方式是否存在差异,哪一个比另一个好? 使用第一个synax代替第二个synax有什么好处? 在定义Flags类型Enums时,我总是使用第二种风格……我一直都在做错吗? [Serializable] [Flags] public enum SiteRoles { User = 1 << 0, Admin = 1 << 1, Helpdesk = 1 << 2 } 那是不一样的 [Serializable] [Flags] public enum SiteRoles { User = 1, Admin = 2, Helpdesk = 4 }

C#枚举 – 针对面具检查标志

我有以下枚举标志: [Flags] private enum MemoryProtection: uint { None = 0x000, NoAccess = 0x001, ReadOnly = 0x002, ReadWrite = 0x004, WriteCopy = 0x008, Execute = 0x010, ExecuteRead = 0x020, ExecuteReadWrite = 0x040, ExecuteWriteCopy = 0x080, Guard = 0x100, NoCache = 0x200, WriteCombine = 0x400, Readable = (ReadOnly | ReadWrite | ExecuteRead | ExecuteReadWrite), Writable = (ReadWrite […]

如何确定Enum值是否具有与其进行比较的一个或多个值?

我有一个标有[Flags]属性的Enum,如下所示: [Flags] public enum Tag : int { None = 0, PrimaryNav = 1, HideChildPages = 2, HomePage = 4, FooterLink = 8 } 在我的站点地图中的站点地图节点上,我将标签组合的int值存储为属性。 我需要做的是检查一个节点是否有一个或多个标签中的任何一个 ,例如Tag.PrimaryNav | Tag.HomePage。 我正在努力使用必要的布尔逻辑来确定Enum值是否具有与其进行比较的一个或多个值。 如果不清楚,请道歉。 如有必要,我可以提供更多信息。

枚举为标志使用,设置和移位

我有两面旗帜: [Flags] enum Flags { A = 1, B = 2 }; 我这样设置它们: Mode = Flags.A | Flags.B; // default value for(int i = 0; i < args.Length; i++) { switch(args[i]) { case "–a": { if ((Mode & Flags.A) == Flags.A && (Mode & Flags.B) == Flags.B) // both, default assume { Mode = Flags.A; […]

带有标志属性的C#枚举

我想知道带有Flag属性的枚举是否主要用于按位运算,如果枚举值未定义,编译器为什么不自动生成值。 例如。 [标志] public enum MyColor { 黄色= 1, 绿色= 2, 红= 4, 蓝= 8 } 如果未分配值1,2,4,8是自动生成的,那将会很有帮助。 想知道你对此的看法。

通过HTTPS进行WCF并签署正文

我有一个我想要连接的SOAP服务。 它需要通过https访问,并且需要通过证书对其进行签名。 我试过以下代码: 按如下方式设置我的客户端: P4_ServiceReference.P4PortTypeClient client = new P4_ServiceReference.P4PortTypeClient(); client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None; client.ClientCredentials.ServiceCertificate.DefaultCertificate = new X509Certificate2(@”[..].cer”); client.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@”[..]”, “somepass”); 甚至更改了我的Reference.cs以在ServiceContractAttribute和OperationContractAttribute上包含ProtectionLevel=ProtectionLevel.Sign 。 会发生什么是创建了wse:security标头,但是正文没有被签名。 该服务返回Element http://schemas.xmlsoap.org/soap/envelope/Body must be signed 。 我错过了什么让身体得到正确的签名?

为什么使用flags + bitmasks而不是一系列布尔?

鉴于我有一个可能处于一个或多个真/假状态的对象的情况,我总是有点模糊为什么程序员经常使用标志+位掩码而不是仅仅使用几个布尔值。 它遍布.NET框架。 不确定这是否是最好的示例,但.NET框架具有以下内容: public enum AnchorStyles { None = 0, Top = 1, Bottom = 2, Left = 4, Right = 8 } 因此,给定锚样式,我们可以使用位掩码来确定选择哪个状态。 但是,似乎您可以使用AnchorStyle类/结构完成相同的操作,其中为每个可能的值定义bool属性,或者为单个枚举值的数组定义。 当然,我的问题的主要原因是我想知道我是否应该使用自己的代码进行类似的练习。 那么,为什么要用这种方法呢? 减少内存消耗? (它似乎不会消耗少于bools的数组/结构) 比结构或数组更好的堆栈/堆性能? 更快的比较操作? 更快的增值/删除? 编写它的开发人员更方便吗?

Enum.IsDefined带有标记的枚举

我现在正在读一本Nutshell中的C#4.0这本书,我认为这本书是一本很好的书,即使是高级程序员也可以作为一个很好的参考书。 我回顾了有关基础知识的章节,我遇到了一个技巧,告诉我在使用标记枚举时是否在Enum中定义了某个值。 该书指出使用Enum.IsDefined对标记的枚举不起作用,并建议如下解决方法: static bool IsFlagDefined(Enum e) { decimal d; return (!decimal.TryParse(e.ToString(), out d); } 如果在标记的枚举中定义了某个值,则应该返回true。 有人可以向我解释为什么这有效吗? 提前致谢 :)

标志与Web服务

我有一个标志属性枚举,它位于Web服务后面,如下所示: [Serializable,Flags] public enum AccessLevels { None = 0, Read = 1, Write = 2, Full = Read | Write } 我的问题是我的网络服务的消费者没有枚举的原始常量值。 生成的代理类客户端端具有以下内容: { None = 1, Read = 2, Write = 4, Full = 8 } 因此,当消费者检查“读取”访问时,即使“testItem”为“Full”,这也将是假的。 ((testItem & Svc.Read) == Svc.Read) 如何通过Web服务正确提供标志? 编辑: 根据这篇文章,我可能无法做我想做的事情。 Ivan Krivyakov说 Enum的透明度不完美 事实certificate,枚举并不像我们希望的那样透明。 有三个棘手的问题: 如果服务器端代码声明枚举并为其成员分配特定的数值,则客户端将无法看到这些值。 如果服务器端代码声明带有“复合”掩码值的[Flags]枚举(如白色=红色|绿色|蓝色),则它在客户端没有正确反映。 如果服务器或客户端发送超出枚举范围的“非法”值,则会在另一侧的XML反序列化器中导致exception。 所以我想知道这只是一个限制,是不可能的。