我需要执行以下操作:
- 获取类型 T 的参数并将其设置为当前。
- 检查 (current).Parent 是否存在并且是 A 类型,如果是,去那里。
- 检查 (current).Owner 是否存在并且属于 B 类型,如果存在,则去那里。
- 检查是否(当前)。无论是否存在并且属于 C 类型,如果是,则去那里。
- 返回(当前)。
这相当于
C c = ((param).Parent as A).Owner as B).Whatever as C;
有一些安全性来检查任何“步骤”是否为空。
问题是我想遍历完全不同的类型和完全不同的属性。我需要在我的结构的几个不同的地方这样做。这可以以某种方式自动化 - 也许使用 lambdas、动态、某种泛型类?我在想类似的东西:
C c = Util.Traverse<C>(someObj, new[]
{
new Step { Path = p => p.Parent, ExpectedType = typeof(A) },
new Step { Path = p => p.Owner, ExpectedType = typeof(B) },
new Step { Path = p => p.Whatever, ExpectedType = typeof(C) }
});