索引器在C#中的真正用途是什么?
对于一个新的C#程序员来说,看起来相当困惑。它看起来像一个对象数组,但实际上并不是。
using System;
using System.Collections;
public class DayPlanner
{
// We store our indexer values in here
Hashtable _meetings = new System.Collections.Hashtable();
// First indexer
public string this[DateTime date] {
get {
return _meetings[date] as string;
}
set {
_meetings[date] = value;
}
}
// Second indexer, overloads the first
public string this[string datestr] {
get {
return this[DateTime.Parse(datestr)] as string;
}
set {
this[DateTime.Parse(datestr)] = value;
}
}
}
然后您可以像这样使用它:
DayPlanner myDay = new DayPlanner();
myDay[DateTime.Parse("2006/02/03")] = "Lunch";
...
string whatNow = myDay["2006/06/26"];
public T this[int i]
{
get
{
return arr[i];
}
set
{
arr[i] = value;
}
}
使用枚举,定义的值仅限于一小组原始整数类型(byte、sbyte、short、ushort、int、uint、long、ulong)。
char 类型也是一种整数类型,但它与其他整数类型有两个不同之处:
没有从其他类型到 char 类型的隐式转换。特别地,即使 sbyte、byte 和 ushort 类型具有完全可用 char 类型表示的值范围,也不存在从 sbyte、byte 或 ushort 到 char 的隐式转换。
char 类型的常量必须写成字符字面量或与类型 char 的强制转换结合的整数字面量。例如,(char)10 与 '\x000A' 相同。
public enum Characters : int {
Alpha = 'a',
Beta = 'b'
}
Characters.Alpha 的值为 97,Characters.Alpha.ToString() 将返回字符串 "Alpha"。 (char)Characters.Alpha 给出的值为 'a'。
.NET 中的任何集合,无论是 ArrayList 还是泛型 List,在其底层结构中都有数组。索引器只是一种改变常规数组索引工作方式的方法,可以通过接受字符串作为输入来查找具有该属性的相应对象,或者其他输入。但是,在所有这些语法糖的背后,它最终仍然以数组的表示形式结束。
关于您的第二个观点,枚举是整数。如果您需要枚举的字符表示形式,则仅限于字符串操作,或者您可以使用适当的属性装饰您的枚举,以便它们将发出所需的字符串或字符表示形式。