【发布时间】:2012-01-13 09:13:47
【问题描述】:
我确信我在这里犯了一个愚蠢的错误,但它打败了我。下面是一段代码:
void Main()
{
//Key is a parent while the list contains its children
Dictionary<string,List<string>> d = new Dictionary<string,List<string>>();
d.Add("1",new List<string>(){"2","3"});//valid.should return false
d.Add("2",new List<string>(){"4"});//valid.should return false
d.Add("3",new List<string>(){"5"});//valid.should return false
d.Add("4",new List<string>(){"1"});//invalid.should return true
IsChildAlreadyAParent("4","2",d);
}
private bool IsChildAlreadyAParent( string child, string parent, Dictionary<string, List<string>> d )
{
if( !d.ContainsKey( child ) || ( d.ContainsKey( child ) && d[child].Count == 0 ))
{
return false;
}
foreach( string childOfChild in d[child] )
{
if( childOfChild == parent )
return true;
if( IsChildAlreadyAParent( childOfChild, parent, d ) ) return true;
}
}
编译它会给我这个错误:
IsChildAlreadyAParent(string, string, System.Collections.Generic.Dictionary<string,System.Collections.Generic.List<string>>)': 并非所有代码路径都返回值
我已经阅读了几次代码,但我看不出如何会错过返回条件。我知道我可以通过在方法结束之前添加方法返回语句来纠正它,但这并不能帮助我理解手头的问题。差距在哪里??
【问题讨论】: