我有一个类,其中包含其他对象的内部列表,如下所示:
public class Parent
{
List<Child> _children;
}
Child说的是这样的:
public class Child
{
public string Name;
}
我想要做的是设置父级,其中_children的成员可以这样访问:
...
Child kid = parentInstance["Billy"]; // would find a Child instance
// whose name value is Billy
...
这可能吗?我显然可以这样做:
Child kid = parentInstance.GetChild("Billy");
但我更喜欢数组/字典之类的语法。如果事实并非如此,这并不是什么大不了的事,而且我不想为达到语法糖而跳过一百万圈。
答案 0 :(得分:7)
您可以为Parent
类定义indexed property:
public class Parent
{
List<Child> _children;
public Child this[string name]
{
get
{
return (_children ?? Enumerable.Empty<Child>())
.Where(c => c.Name == name)
.FirstOrDefault();
}
}
}
答案 1 :(得分:0)
“数组语法”并不是最适合您所需要的,而且它也相当过时了:)
如今在.net中我们有Linq和lambda扩展方法,这使得我们在处理集合时的生活变得非常简单。
你可以这样做:
IEnumerable<Child> childs = parentInstance.Childrens.Where(child => child.Name == "Billy"); //this will get all childs named billy
Child child = parentInstance.Childrens.FirstOrDefault(child => child.Name == "Billy"); //this will get the first child named billy only, or null if no billy is found
您也可以用linq语法而不是lambda编写上述查询。例如,第一个查询将是这样的:
IEnumerable<Child> childs = from child in parentInstance.Childrens where child.Name == "billy" select child;