0

内置数据类型和用户定义数据类型的主要区别在于:内置数据类型可以接受字面量值(直接插入代码中的值,这个过程也称为硬编码)。

那么是否可以创建与布尔值相同的自定义数据类型,它接受三个值:yes/no/maybe WITHOUT USING enums。

比如下面的代码:

MyCustomBoolean a = maybe;

我问了上面的问题,因为我想了解 C# 中的内置数据类型是用核心语言(如 C++ int、char ...)指示的,还是没有?

- -更新 - -

对于第二个问题,让我问一个问题以使第二个问题更清楚:

我知道例如字符串是 System.String 的别名,但是 C# 中的纯字符串在没有 System.String 的情况下是否可以工作?

4

3 回答 3

2

没有办法完全按照您的要求执行此操作。但是,您可以在 C# 中创建可以实现此结果(命名值)的常量字段,但只能使用整数类型或字符串 - 换句话说,您已经可以将其用于编译时常量。这对于其他Magic Values尤其有用。

public const string Maybe = "Maybe";
public const int Maybe = 0;

解决此问题的一种方法是初始化静态只读字段或属性,尽管它不能用作真正的常量。例如

public static readonly MyCustomBoolean Maybe { get { return new MycustomBoolean(); } }
public static MyCustomBoolean Maybe = new MyCustomBoolean();
于 2014-09-23T18:32:41.183 回答
0

对于这种特定情况,您可以使用可为空的布尔值。使用典型的操作,例如:

bool? b = null
if (b.HasValue)
if (b.Value)
b = true

哪里可能是空的,或者有HasValue == false.

于 2014-09-23T18:32:32.300 回答
0

文字是 C# 语言的一个特性。您不能创建新的文字。

您可能对其他编程语言感兴趣,例如 Nemerle,它允许您创建用户定义的文字,例如此 XML 文字: https ://github.com/rsdn/nemerle/wiki/XML-literals

枚举和常量通常填补了 C# 的空白。对于更复杂的结构,您经常会看到使用了一些流畅的 API。

当然,我们可以看到 C# 中缺少此功能意味着提供一种自然的方式来定义查询意味着需要更改 C# 语言规范以支持 LINQ。如果 C# 具有与 Nemerle 相似的元编程特性,那么它们可以在不改变语言语法的情况下实现与 LINQ 相同的目标。

于 2014-09-23T18:33:47.860 回答