.net FlagsAttribute 枚举是否需要手动赋值?

2023-12-03

为了允许在显示新闻故事的方法上使用不同的格式选项,我创建了一个可以传入的枚举来指定它的显示方式。

[Flags]
private enum NewsStyle
{
    Thumbnail = 0,
    Date = 1,
    Text = 2,
    Link = 4,
    All = 8
}

string FormatNews( DataRow news, NewsStyle style )
{
    StringBuilder HTML = new StringBuilder();

    // Should the link be shown
    if ( ((newsStyle & NewsStyle.All) == NewsStyle.All || (newsStyle & NewsStyle.Link) == NewsStyle.Link))
    {
                HTML.AppendFormat("<a style=\"text-decoration:none; color: rgb(66, 110, 171);\" href=\"ViewStory.aspx?nsid={0}\">",
                                  UrlEncode(newsStory["NewsStoryID"].ToString()));
    }

    // Etc etc...
}

// So to call the method...
Response.Write( FormatNews( news, NewsStyle.Date | NewsStyle.Text ) );

问题是,只有在手动指定枚举上的值时,我才能使代码正常工作,否则按位枚举检查操作将无法正常工作。

我一直遵循让 .net 处理枚举值分配的规则 - 这是一个真正的例外吗?


是的,这是一个真正的例外。枚举默认从 0 开始分配值,每个值都比前一个值高 1,无论任何值FlagsAttributes。 (当然,当您手动指定某些值时,还有更详细的规则 - 请参阅MSDN 文档)

虽然它确实如此somewhat让标志枚举自动获取二次方的值是有意义的,我明白为什么最好不要这样做的原因:

有一个这样的枚举是完全合理的:

[Flags]
enum Foo
{
    None,
    Bar,
    Baz, 
    BarAndBaz
} 

当然,这需要值为 0、1、2 和 3 才合理。

让一个属性的存在改变一段 C# 代码的全部含义是非常违反直觉的。考虑我的Foo示例枚举。应删除Flags属性是否可以通过默默更改枚举值来破坏代码?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.net FlagsAttribute 枚举是否需要手动赋值? 的相关文章

  • 以编程方式更改 Excel 中的字体(Trebuchet MS、Calibari)C#

    我目前正在使用一个 C 应用程序 该应用程序有一个将生成 Excel 文件的类 一切都很顺利 Excel 工作表上填充的数据具有 Times New Roman 字体 我想将其更改为其他字体 Calibari 我怎样才能以编程方式做到这一点
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap
  • 运行时两个注册之间的简单注入器基于动态上下文的注入

    我有一个使用 Simple Injector 进行命令处理程序注册的中介应用程序 并且注入和处理程序均已设置并完美运行 class DoWashingCommandHandler IRequestHandler
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 如何将 QSerialPort 模块添加到 CMake 中?

    我想将 QSerialPort 模块添加到 CMake 中 根据我的理解 我需要将QT 串口添加到 pro中 我只想使用 CMake 所以我尝试编译简单的 CMake 文件 但有错误 QtCore 正在工作 qDebug 可以毫无问题地显示
  • ObjectTrackingEnabled 和 linq-to-sql

    I read here http www sidarok com web blog content 2008 05 02 10 tips to improve your linq to sql application performance
  • MVVM 同步集合

    是否有一种标准化方法可以将 Model 对象集合与 C 和 WPF 中匹配的 ModelView 对象集合同步 我正在寻找某种类 可以使以下两个集合保持同步 假设我只有几个苹果 并且可以将它们全部保存在内存中 换句话说 我想确保如果我将 A
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • argc 和 argv 在 Windows 中没有用吗?

    在 Linux 中 argc 和 argv 计算终端中的参数 但在 Windows 中 我找不到放置第二个参数的地方 事实上 每次我运行该程序时 它都会创建那个丑陋的黑色窗口 我什至没有机会给出任何争论 那么这两个变量在Windows平台下
  • Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

    这个问题与 NET和OpenXml有关 我已经阅读了以下文章 它有很好的解释 但没有回答我的问题 Excel 2007 中数值的可视化与底层 xml 文件不一致 https stackoverflow com questions 58594
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 内存不足异常

    我正在使用 C 和 asp net 开发一个网络应用程序 我一直收到内存不足的异常 该应用程序的作用是从数据源读取一堆记录 产品 可能是数百 数千 通过向导中的设置处理这些记录 然后使用处理的产品信息更新不同的数据源 虽然有多个 DB 类
  • 链接错误:xxx 已在 *****.LIB 中定义:: 究竟出了什么问题?

    Problem 我正在尝试使用一个名为DCMTK http dicom offis de dcmtk它使用了一些其他外部库 zlib libtiff libpng libxml2 libiconv 我已经从同一网站下载了这些外部库 LIB
  • 为什么 ASP.Net MVC Range 属性采用类型?

    我只是想知道为什么范围验证属性可以采用类型和两个字符串作为参数 这是为了根据枚举或类似的东西验证字符串吗 另外 我想做的是找到一种简单的方法来验证必须出现在枚举中的 3 个字符的字符串 有什么建议吗 谢谢 亚历克斯 我确实发现你提到的 Ra
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • 如何进行平衡组捕获?

    假设我有这个文本输入 tes tR R abc aD mnoR xyz 我想提取 ff 输出 R abc R xyz D mnoR xyz R R abc aD mnoR xyz 目前 我只能使用平衡组方法提取组内的内容 如中所示msdn
  • 更快的 WinSock sendto()

    我使用的是 Windows Server 2008 我的程序是用 C 编写的 我在 while true 循环中使用 WinSock2 和 sendto 来发送数据包 代码如下 while true if c snd gt max c sn
  • 预览MouseMove 与 MouseMove

    我有相当多的 XAML 经验 但最近我注意到我的大多数同事都使用预览鼠标移动代替鼠标移动事件 我一直用鼠标移动它对我很有帮助 但我忍不住问我什么时候应该使用预览鼠标移动什么时候鼠标移动 有什么区别 各自有什么优点和缺点等等 PreviewM
  • 如何以一对一/零关系更新员工和身份用户

    我正在尝试更新员工记录 也想更新身份用户 如果我先单独更新身份用户 例如 UserManager Update user Context Entry employee State System Data Entity EntityState
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • 如何禁止不在服务器中的人

    我想知道是否可以通过以下方式禁止某人User ID 通常 要禁止某人 您可以使用GuildMember和 ban method GuildMember ban However 如果用户不在您想要禁止他们加入的公会中 则不可能获得他们的Gui
  • OpenGL:将 VBO 与 std::vector 结合使用

    我正在尝试加载一个对象并使用 VBO 和 glDrawArrays 来渲染它 问题是像这样的简单浮点指针float f 在我的情况下不起作用 因为我超过了该指针可以存储的值的限制 所以我的解决方案是使用向量 而且它不起作用 这是我的代码 u
  • 在 .NET Winforms 应用程序中保存设置[重复]

    这个问题在这里已经有答案了 可能的重复 存储 NET 应用程序的用户设置的最佳方式是什么 我发现了很多关于如何从 Winforms 应用程序保存应用程序设置 每个用户 的非常不同的示例 我想在 C 中执行此操作的正确方法非常简单 希望有人能
  • 在单个 DataGridView 单元格中设置两种颜色的文本

    我的 C Windows 应用程序中有一个数据网格视图 我需要更改单元格中最后 5 个字符的颜色 但我不知道该怎么做 我在 CellPainting 事件中有此代码 但不起作用 private void dgvSorteados CellP
  • 如何使用ajax调用将对象传递给控制器

    我想将一个对象传递给控制器 并检索控制器中的值 我的定义如下 网页代码 var positionarray JavaScript button live click function positionarray push id sessio
  • 在 C 中从字符串调用函数

    在 C 中 如何通过名称作为字符串来调用函数 我有这个 int main int argc const char argv char events test test2 int i 0 for i lt 2 i char event eve
  • 如何在 Android 内部存储上创建文件?

    我想将内部存储上的文件保存到特定文件夹中 我的代码是 File mediaDir new File media if mediaDir exists mediaDir createNewFile mediaDir mkdir File f
  • 从 DOM 中删除 HTMLCollection 元素

    我有一个段落元素的集合 有些是空的 有些只包含空格 而另一些则有内容 p Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpi
  • 如何构建新的 ASP MVC 应用程序?

    我需要启动一个新的 mvc 项目 并且一如既往地我有关于 ASP 身份的问题 永远不知道把它放在哪里 我计划像这样组织解决方案 ProjectWebUI 具有 asp 身份框架的 mvc 应用程序 由具有身份验证的互联网模板制成 Proje
  • Racket 流会记住它们的元素吗?

    当从无限流中计算大量数字时 Racket 是否使用记忆 因此 举例来说 如果我打印 也称为计算并显示 无限整数流上的前 400 个数字 1 2 3 399 400 就在我要求打印这个无限流上的前 500 个数字之后 第二组计算会使用记忆吗
  • Laravel 迁移更改使列可以为空

    我创建了一个未签名的迁移user id 我怎样才能编辑user id在新的迁移中也能做到这一点nullable Schema create throttle function Blueprint table table gt increme
  • 在iOS应用程序中使用本地视频文件(xcode)

    我正在寻找在 iOS 应用程序中播放视频文件的最佳方式 我的应用程序目前正在开发中 将有大约 50 个视频 每个视频长 30 秒 和简短教程 如果可能的话 我希望它们全部在本地 这样用户就可以在没有互联网连接时观看视频 我在堆栈溢出上找不到
  • 如何使用AspectJ修改返回对象的属性?

    我有一个如下所示的类 来自 Spring Roo DataOnDemand 它返回一个新的瞬态 非持久化 对象以用于单元测试 这就是我们从 Spring Roo 的 ITD 进行推送后的代码 public class MyObjectOnD
  • 错误:java.lang.ClassNotFoundException:更新 android studio 3.0.0 时未找到类 org.openjdk.jdi.ReferenceType

    我已将我的项目从 2 2 3 迁移到稳定的 android studio 3 0 0 并设置 jdk 1 8 现在我们运行该应用程序 我正进入 状态 以下例外 Error java lang ClassNotFoundException C
  • jquery .each() .load() 等待完成

    我正在使用 jquery 将行加载到表中 我想知道如何使它们一一加载 即 只有在第一个块完成加载后 第二个块才应开始加载 我的桌子看起来有点像这样 table thead tr th Heading th tr thead tbody tb
  • 无法在 Xcode 6.1 中存档正在运行的 6.0.1 Swift 项目/分段错误:11

    由于信号导致命令失败 分段错误 11 在 Users thedude Documents Repositories MyProject Data swift 258 36 line 258 56 RangeText UILocalNotif
  • 调试 winform 崩溃 - C# [ADPlus + Windbg]

    System AccessViolationException was unhandled Message Attempted to read or write protected memory This is often an indic
  • 无法从 MSR 读回

    我正在编写一个内核模块 它是关于读写 MSR 的 我写了一个简单的程序进行测试 但仍然失败 它所做的就是写入 MSR 然后读回 这是代码 static int init test3 init void uint32 t hi lo hi 0
  • 从另一个类中的 JPanel 文本字段获取值

    I have JPanel使用文本框 在另一个面板中保存按钮 如果我点击保存按钮 我必须获取第一个面板文本框值 如何访问它 只需将 TextField 设置为公共静态数据即可 然后你可以使用 ClassName TextFiledName
  • .net FlagsAttribute 枚举是否需要手动赋值?

    为了允许在显示新闻故事的方法上使用不同的格式选项 我创建了一个可以传入的枚举来指定它的显示方式 Flags private enum NewsStyle Thumbnail 0 Date 1 Text 2 Link 4 All 8 stri