【发布时间】:2012-08-10 06:17:56
【问题描述】:
我最近发现自己想知道是否存在类似于三元运算符的现有运算符,但用于枚举......这可能是一个处理工具,用于编写更少的代码来处理枚举的值......
我找不到任何东西,所以我提出这个问题......
如何构建自己的运算符来处理枚举,如下所述?
进行以下枚举:
public enum ComTypes { Call, Email, SMS }
假设我需要根据 ComType 分配弹出对话框的标题。目前我可以像这样使用三元运算符:
ComTypes comType = ...;
var title = comType == ComTypes.Call ? "Make a Call" :
comType == ComTypes.Email ? "Send an Email" :
/* ComTypes.SMS */ "Send a Text";
我想要的是使用新的枚举运算符获得更简洁的格式...类似于以下内容:
ComTypes comType = ...;
var title = comType ?
.Call: "Make a Call",
.Email: "Send an Email",
.SMS|default: "Send a Text";
所以我想我的入门问题是:
- 我可以创建自定义运算符并将其与普通 C# 编译器并行使用吗?
- 假设我可以创建运算符,我可以使用“?”作为枚举运算符,即使它被标准三元运算用于布尔值?
- 我知道我可以去 Google 获取这篇文章,但如果有人对好的编译器创建文章有任何建议,那就太好了。
--编辑--
我只是想把它放在这里...我知道如果这阻止我进行开发是不切实际的...我知道如何通过其他几种方式实现...我想要的有助于理解我实现我所概述的目标的起点...只是为了尝试编写代码并了解更多关于我日常使用的框架的乐趣。
【问题讨论】:
-
我感觉到你的痛苦。我想念其他语言中的这种简短表达。但我也觉得你的尝试根本不值得,除非你成功了。不要仅仅为了缩短一些表达式而构建这样的运算符,而是要聪明:完全删除“表达式”,因为它是一个 CONSTANT 键值映射,并构建一个字典 key:enum/value:string 并使用它来查找以简单的 result=dict[myenumval] 方式。更容易、更快、更连贯、更容易编辑。干燥。
-
switch是最接近的,不会给自己带来太多不便。如果您编写自己的编译器,代码可移植性就会被抛在一边,因为没有其他人会拥有您的编译器,并且常规 C# 编译器会显示一堆错误。 -
好的,我知道你想要娱乐:) 看我的帖子。
-
" 使用新运算符获得更简洁的格式" 将新运算符引入具有编译器“扩展”的成熟语言中永远不会干净或简洁。它只会让其他人无法阅读您的代码。
标签: c# asp.net enumeration ternary-operator