如何在C#中递归构建TreeView
private void enumerateValues(IEnumerator<KeyValuePair<string, object>> iEnumerator, TreeNode parentnode)
{
if(iEnumerator is IEnumerable)
{
// ADD THE KEY
TreeNode childNode = parentnode.Nodes.Add(iEnumerator.Current.Key);
enumerateValues(iEnumerator.Current.Value, childNode);
}
else
{
/// add the value
TreeNode childNode = parentnode.Nodes.Add(iEnumerator.Current.Value.ToString());
}
}
我不知何故收到以下错误:
最佳重载方法匹配 'WindowsFormsApplication1.Form1.enumerateValues(System.Collections.Generic.IEnumerator
>, System.Windows.Forms.TreeNode)' 有一些无效参数
参数“1”:无法从“object”转换为“System.Collections.Generic.IEnumerator>”
请问我该如何修复它
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
以下行很可能是罪魁祸首:
因为
enumerateValues
方法接受IEnumerator>
,因此键值对的值将始终属于对象
类型。因此,您无法使用iEnumerator.Current.Value
调用该方法,因为该值不是IEnumerator>
类型。这正是错误消息告诉您的内容:
您必须先将
iEnumerator.Current.Value
转换为正确的类型,然后才能调用该方法。您可以使用as运算符。我还建议您使用
IEnumerable<如果可以的话,请使用 T>
而不是IEnumerator
。它更清楚地显示代码的意图,您不必手动处理迭代,您可以使用 LINQ就可以了。The following line is most likely the culprit:
Because the
enumerateValues
method accepts aIEnumerator<KeyValuePair<string, object>>
, the values of the key-value pairs will always be of typeobject
. Therefore you cannot call the method withiEnumerator.Current.Value
, because the value isn't of typeIEnumerator<KeyValuePair<string, object>>
.This is exactly what the error message tells you:
You will have to cast
iEnumerator.Current.Value
to the correct type first, before you can call the method. You can do this using the as operator.I also suggest you use
IEnumerable<T>
instead ofIEnumerator<T>
, if you can. It shows the intent of the code more clearly, you won't have to handle the iteration manually and you can use LINQ on it.