C# 精通之路 —— 基本类型杂项详解(StringBuilder、枚举位标志、下限非0的数组),这些细节知识你知多少?

这里是引用
作者:浪子花梦,一个有趣的程序员 ~
本文讲解三个常用的方法,字符串的 StringBuilder对象,枚举的位标志用法,下限非0的数组(不建议使用,会对程序有所影响) . . .


文章目录


StringBuilder

和String 不同,StringBuilder 代表可变字符串。也就是说,StringBuilder 的大多数成员都能更改字符数组的内容,同时不会造成在托管上分配新对象。StringBuilder 只有下面两种情况才会分配新对象:

  1. 动态构造字符串,其长度超过了设置的 “容量”
  2. 调用 StringBuilder 的ToString 方法

常见方法如下所示:

StringBuilder stringBuilder = new StringBuilder("huameng");

// 返回最大容纳的字符数
Console.WriteLine(stringBuilder.MaxCapacity);

// 获取容量
Console.WriteLine(stringBuilder.Capacity);

// 获取长度
Console.WriteLine(stringBuilder.Length);

// 返回一个 String对象,浪费性能
Console.WriteLine(stringBuilder.ToString());

// 把 Length 设置为 0
stringBuilder.Clear();

// 末尾追加对象
stringBuilder.Append("langzi");
Console.WriteLine(stringBuilder);

// 追加多个对象,最常用的方法
stringBuilder.AppendFormat("{0},{1}", "hua", "meng");
Console.WriteLine(stringBuilder);

// 替换字符或者字符串
stringBuilder.Replace("hua", "niubi");
Console.WriteLine(stringBuilder);

// 删除指定范围的字符
stringBuilder.Remove(0, 5);
Console.WriteLine(stringBuilder);

char[] ch = new char[10];
// 复制内容
stringBuilder.CopyTo(0, ch, 0, 5);
Console.WriteLine(ch);

结果如下所示:
在这里插入图片描述
因为上面的方法都是对一个对象进行操作的,所以我们也可以将许多方法连起来用,如下所示:

StringBuilder stringBuilder = new StringBuilder();

String str = stringBuilder.AppendFormat("{0} {1}", "langzi", "huameng").
	Replace(' ', '-').Remove(0, 6).Insert(0,"xiaocong").ToString();

Console.WriteLine(str);

输出的结果如下所示:
在这里插入图片描述

String 和 StringBuilder 中的方法并不完全的对应,比如 ToUpper 方法 StringBulider中就没有,但我们可以像下面这样的操作:

StringBuilder stringBuilder = new StringBuilder();

stringBuilder.Append("huameng");
String str = stringBuilder.ToString().ToUpper();

Console.WriteLine(str);

使用 ToString方法 可以在 String 与 StringBuilder 对象中随意的切换,而 ToString 生成 String方法并不改变字符串原有的样子,所以我们就可以为所欲为了 . . .

.


枚举位标志

定义一个枚举类型方式如下所示:

internal enum Color
{
    White,
    Red,
    Green,
    Blue,
    Orange
}

访问方式如下所示:

Color color = Color.Blue;

// 常规字符串样子
Console.WriteLine(color);
Console.WriteLine(color.ToString());
Console.WriteLine(color.ToString("G"));

// 十进制
Console.WriteLine(color.ToString("D"));

// 十六进制
Console.WriteLine(color.ToString("X"));

结果如下所示:
在这里插入图片描述

对于枚举类型的操作有许多,感兴趣的小伙伴可以自行查看文档,下面我们来看看位标志是怎么玩的 . . .

我们只需要在枚举类型的定义上面加上 Flags特性就行了,如下所示:
在这里插入图片描述
然后我们就可以像如下这样操作了:
在这里插入图片描述
输出的结果如下所示:
在这里插入图片描述

如果我们不加那个特性的话,那么我们将输出:5 . . .

.
枚举类型是允许定义方法的,但我们可以通过扩展方法来定义方法,如下所示:
在这里插入图片描述

测试如下所示:
在这里插入图片描述
结果如下所示:
在这里插入图片描述

.


下限非0的数组

创建下限非0的数组会影响程序性能,我们在实际过程中,应该尽量减少这种情况的发生,但我们要会创建这种类型的数组,使用 CreateInstance 进行创建,示例如下所示:
在这里插入图片描述
输出的结果如下所示:
在这里插入图片描述

当我们尝试访问 下标为 0 的元素时,将会引发异常:
在这里插入图片描述
结果如下所示:
在这里插入图片描述
.
.
.


猜你喜欢

转载自blog.csdn.net/weixin_42100963/article/details/107440607