从模拟字符串型的枚举说起

1. 有字符串型的枚举吗?

UK 在《关于枚举的种种》中提到这样一个问题:

枚举的成员类型都是数值型的,如果想做一个字符型的枚举有什么办法?

enum colors : string{
    red='#ff0000',

  }

在展开讨论之前,我认为有必要搞清楚另一个问题,上面代码中的 '#ff0000' 不是字符而是字符串,应改成 "#ff0000",于是,UK 的问题也顺利成章地改成“想做一个字符串型的枚举有什么办法”了。

很坦白地说,.NET 并不支持这样的字符串型枚举。另外,也不是所有的数值类型都能作为枚举的底层类型,枚举的底层类型只能是整数类型,这意味着某天你想定义一个底层类型为 double 的枚举,你将会收到编译器的警告信。

UK 的代码确实提出了这样一种需求,colors 就像一个枚举,但其成员的值是一个字符串,于是,我们很容易产生这样一个疑问:是否能够模拟出这样一个枚举呢?

2. 有办法模拟出来吗?

在写任何代码之前,让我们首先思考一下,假如真有这样一个 Color 类,我们会怎样使用它?以下是我想到的两个用法:

1// Code #01
2
3Color c1 = Color.Red;
4string s1 = (string)c1;
5Debug.Assert(s1 == "#FF0000");
6
7Color c2 = (Color)"#00FF00";
8Debug.Assert(c2 == Color.Green);

首先,枚举是通过其成员而不是构造函数来初始化的,正如上面代码的第三行。于是,我们应该把构造函数设为私有,同时模拟一些枚举成员并暴露出来:

// Code #02

public class Color
{
  private Color(string value)
  {
    m_Value = value;
  }

  private string m_Value;

  public static readonly Color Red = new Color("#FF0000");
  public static readonly Color Green = new Color("#00FF00");
  public static readonly Color Blue = new Color("#0000FF");
}

时间: 2024-12-03 18:21:12

从模拟字符串型的枚举说起的相关文章

C#应用:从模拟字符串型的枚举说起

字符串 1. 有字符串型的枚举吗? UK 在<关于枚举的种种>中提到这样一个问题: 枚举的成员类型都是数值型的,如果想做一个字符型的枚举有什么办法?     enum colors : string{        red='#ff0000',            }在展开讨论之前,我认为有必要搞清楚另一个问题,上面代码中的 '#ff0000' 不是字符而是字符串,应改成 "#ff0000",于是,UK 的问题也顺利成章地改成"想做一个字符串型的枚举有什么办法&

模拟字符串处理函数 stuff 处理 Ntext 字段

函数|字符串 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_stuff]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[p_stuff]GO /*--Ntext字段处理  模拟字符串处理函数 stuff 完成表中 ntext 字段的 stuff 处理 注意,表中需要有列名为:id 的主键(或标识字段),数据类型为

各种数字类型转换成字符串型--JAVA

转换|字符串 各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型. 字符串型转换成各种数字类型: String s = "169"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f

模拟字符串处理函数 stuff 的存储过程,对 ntext 字段进行stuff .

存储过程|函数|字符串 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_stuff]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[p_stuff]GO /*--Ntext字段处理 模拟字符串处理函数 stuff完成表中 ntext 字段的 stuff 处理注意,表中需要有列名为:id 的主键(或标识字段),数据类

ExcelVBA引用单元格内字符串型代码并执行

  单击Visual Basic工具栏上的安全按钮,在弹出的安全性对话框中可靠发行商标签项底下的'信任对于"Visual Basic 项目"的访问'前打√. ALT+F11打开VBE编辑器,单击菜单工具-引用,在弹出的引用-VBAProject对话框中,选择引用Microsoft Visual Basic 6.0 Extensibility这一项. 新建一个模块,命名为:yyzx 在Sheet1(Sheet1)代码窗口,粘贴如下代码: Sub 引用单元格字符串型代码并执行() Dim

colors-Android-把int型color转换为hexa 字符串型

问题描述 Android-把int型color转换为hexa 字符串型 在这个函数中添加了一个int,froma color,如何把它转换成一个hexa字符串:#efefef public static int RGB(float[] hsv) { return Color.HSVToColor(hsv); } 解决方案 这里有俩种方法可以把Interger转化成Hexa字符串 int n = 123456; System.out.println(String.format("#%X"

MyXls导excel遇到长数字,自动变成科学计数法了,能不能有办法自动生成字符串型?

问题描述 MyXls导excel遇到长数字,自动变成科学计数法了,能不能有办法自动生成字符串型?求教了 解决方案 解决方案二:在特殊列的数据前加个符号就可以了,比如加个'解决方案三:我也试过,但是导出的excel会显示单引号',能不能自动隐去这个单引号?

java求字符串型逻辑表达式的bool值

  这是最近在项目中的一个需求,已知a=3,求字符串"a<=2"的值,也就是应该返回false.这个问题可大可小,就我们的应用场景也就是用来让用户自定义变量区间,比如类似下面这样的规则: a<=2    返回积分系数1.0 2<a<=5  返回积分系数1.1 a>5     返回积分系数1.2     如果用switch写死在代码中,以后要修改规则实在是很麻烦的事情,用户也希望能自己维护这样些区间值.于是我想就让用户自己输入这样的表达式和变量的值保存在数据

怎样用if语句判断参数是否为字符串型啊?如果不用if语句还能用什么方法啊?

问题描述 怎样用if语句判断参数是否为字符串型啊?如果不用if语句还能用什么方法啊? 问题补充:java中用什么?mistake 写道 解决方案 就if(){}else{} 啊if(parm instanceof String){//做该做的事情}else{ System.out.println("请输入合法数据类型");}是这样吗?解决方案二:java 中也那样判断只是js 中还有个typeof(parm) 方法,可以判断出参数的类型.我差点弄混了解决方案三:是问的 js 中还是ja