我正在浏览一个示例C#(WPF)代码,我遇到了以下块:
public string this[string columnName]
{
get
{
if (columnName == "FirstName") {
return string.IsNullOrEmpty(this.firstName) ? "Required value" : null;
}
if (columnName == "LastName") {
return string.IsNullOrEmpty(this.lastName) ? "Required value" : null;
}
return null;
}
}
此代码块用于执行数据验证。通过它的外观它看起来像一个属性,因为它包含get{}
块。只想了解语法的语义含义:
public string this[string columnName]
答案 0 :(得分:4)
这些被称为Indexers。
索引器允许对类或结构的实例进行索引 阵列。索引器类似于属性,除了它们的访问器 参数。
说班级名称为TestClass
。它允许这样:
TestClass testObject = new TestClass();
string firstName = testObject["FirstName"];
一个可能的示例将是 Dictionary ,它在内部使用索引器。它允许您从与关键元素对应的字典中获取值:
Dictionary<int,string> dict = new Dictionary<int,string>();
dict.Add(1, "Test1");
string value = dict[1]; // value will be Test1.
答案 1 :(得分:0)
它意味着你可以过去&#34;这个&#34;通过索引。例如,如果类的名称是IndexClass,则可以执行以下操作:
IndexClass IC = new IndexClass();
string name= IC["FirstName"];
string name2=IC["LastName"];
此索引器返回一个字符串,其类型为string。你只能在[]内找到一个字符串,而不是任何其他类型的字符串。
答案 2 :(得分:0)
Indexers允许您向类中添加索引器,并使用类似index
的数组访问它。所有集合都使用索引器,您也可以在创建自己的集合时使用它。
但取决于您的代码,也可以使用属性来完成:
public string FirstName
{
get { return string.IsNullOrEmpty(this.firstName) ? "Required value" : null; }
}
public string LastName
{
get { return string.IsNullOrEmpty(this.firstName) ? "Required value" : null; }
}