C# 访问对象类似于索引,但在C中是按名称访问的#
我必须上课,父亲和孩子(举例) 我的实现的一个片段 班主任C# 访问对象类似于索引,但在C中是按名称访问的#,c#,properties,indexing,C#,Properties,Indexing,我必须上课,父亲和孩子(举例) 我的实现的一个片段 班主任 public class Father { public int Id { get; set; } public string Name { get; set; } public List<Child> Children { get; set; } public Father() { } } 我正试着做这样的事情 Father f = new Father(
public class Father
{
public int Id { get; set; }
public string Name { get; set; }
public List<Child> Children { get; set; }
public Father()
{
}
}
我正试着做这样的事情
Father f = new Father();
f.Children[0]; // ok
f.Children[1]; // ok
f.Children["John"]; // Duh!
我现在,这是错误的,我需要在儿童课上实现一些东西,我尝试过这个
public Child this[string name]
{
get
{
return this;
}
}
但这不起作用
如何为我的班级孩子实现此功能?A列表
没有字符串索引器;您可以向父类添加一个,但用法如下:
var child = parent["Fred"];
(不包括儿童)
对于索引器本身:Try(在索引器中):
要在列表本身上获取索引器,您必须创建一个自定义列表类型并在其中添加索引器
在国际海事组织,一种方法可能更清晰(关于父亲):
您将子项列表视为一个(可以通过键访问字典)。只需将列表更改为字典,并将字符串设置为孩子的名字。在父类中,您可以编写以下代码:
public Child this[string name]
{
get
{
return Children.Where(c => c.Name == name);
}
}
然后像这样使用它:
Father f = new Father();
f.Children[0]; // ok
f.Children[1]; // ok
f["John"]; // ok!
您可以将
子项
列表设置为一个索引,以便通过索引或键引用它,然后添加以名称作为键的对象。不过,您要知道,如果您有多个同名的子项,这些选项中的任何一个都可能会遇到问题。或者您可以这样设置:
public class Father
{
public int Id { get; set; }
public string Name { get; set; }
public Children Children { get; set; }
public Father()
{
}
}
public class Children : List<Child>
{
public Child this[string name]
{
get
{
return this.FirstOrDefault(tTemp => tTemp.Name == name);
}
}
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public Child()
{
}
}
公共类父
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共子项{get;set;}
公父()
{
}
}
公营班级儿童:名单
{
公共子项此[字符串名称]
{
得到
{
返回此.FirstOrDefault(tTemp=>tTemp.Name==Name);
}
}
}
公营儿童
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共儿童()
{
}
}
然后你想怎么称呼它。+1,OP的第一个问题是他将
this
属性放在了错误的类中。这样,我将访问名为John的父亲,而不是名为johnth的孩子。这是不正确的。像这样,您要求父亲查找具有指定名称的孩子。这就是父亲在使用Where()子句的实现中所做的。另一个不能在子类中编写的重要原因是父亲有权访问子类集合。一个孩子无法访问所有其他孩子。谢谢Marc。我知道如何使用Linq实现这一点,但我知道,我想通过Indexer实现accessin的功能。我无法通过字符串索引+1访问对象列表。解决这个问题可以解释为什么许多.Net Framework控件对集合使用专用类。(例如,控件
对控件
成员使用控件.控件集合
而不是列表
)。我同意马克的观点,直接使用索引器是不明确的。parent[“Fred”]
返回父对象名为“Fred”的子对象的想法是非常不直观的。但在这种情况下,您不能再通过索引访问:)感谢指向OrderedDictionary类的指针。正是我想要的。@AnthonyVO-很高兴它帮了我的忙!:)
public Child this[string name]
{
get
{
return Children.Where(c => c.Name == name);
}
}
Father f = new Father();
f.Children[0]; // ok
f.Children[1]; // ok
f["John"]; // ok!
public class Father
{
public int Id { get; set; }
public string Name { get; set; }
public Children Children { get; set; }
public Father()
{
}
}
public class Children : List<Child>
{
public Child this[string name]
{
get
{
return this.FirstOrDefault(tTemp => tTemp.Name == name);
}
}
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
public Child()
{
}
}