You need to enable JavaScript to run this app. C#递归嵌套结构中如何获取同类型InnerException的最内层实例
优惠活动
大模型
产品
解决方案
定价
更多

C#递归嵌套结构中如何获取同类型InnerException的最内层实例

嵌套递归对象链末端值获取实现

前置修正

提供的示例代码存在属性名不匹配的编译问题:

  • 类InnerException定义的字符串属性为text
  • 但对象初始化示例中写的是message
    需要统一属性名(要么把类属性改为message,要么把初始化代码里的赋值字段改为text)后才能正常运行。

实现方案

1. 迭代遍历(优先推荐)

没有递归栈溢出风险,哪怕嵌套链路长达数万层也能稳定运行。
核心逻辑是从链路起点开始,逐层向下跳转,直到找不到下一层innerException时,当前节点就是目标末端实例。

public static string GetFinalNestedText(RequestTest rootRequest)
{
    // 空引用防护
    if (rootRequest?.innerException == null)
        return string.Empty;

    InnerException currentNode = rootRequest.innerException;
    // 逐次向下遍历,直到无下一层嵌套
    while (currentNode.innerException != null)
    {
        currentNode = currentNode.innerException;
    }

    return currentNode.text;
}

调用该方法传入初始化完成的request对象,即可直接得到末端存储的"inner 2"字符串。

2. 递归实现

代码更简洁,仅适合嵌套层级较浅的场景,过深的嵌套会触发栈溢出异常。

public static string GetFinalNestedTextRecursive(InnerException currentNode)
{
    // 空值兜底
    if (currentNode == null)
        return string.Empty;
    // 递归终止条件:当前节点无下一层嵌套
    if (currentNode.innerException == null)
        return currentNode.text;
    
    // 向下查找下一层
    return GetFinalNestedTextRecursive(currentNode.innerException);
}

调用时传入链路第一层的InnerException实例即可:

var lastContent = GetFinalNestedTextRecursive(request.innerException);

注意事项

  • 所有实现必须增加空值判断:如果链路中间某一层的innerException提前为null,要做兜底处理,避免触发空引用异常
  • 深层嵌套场景优先用迭代方案,无栈溢出风险、性能更稳定
  • 注意统一类属性和初始化代码的字段名,否则无法通过编译

内容的提问来源于stack exchange,提问作者joeyanthon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 04:36:04