我有一个奇怪的问题,但我希望有人可以帮助我,我有这个vb.Net代码
For Each navigation In navigations
If obj.GetType().GetProperty(navigation.Name) IsNot Nothing Then
Dim childs = obj.GetType().GetProperty(navigation.Name)
Dim childValues = childs.GetValue(obj, Nothing)
If childValues Is Nothing Then
Continue For
End If
For Each item In childValues
If item Is Nothing Then
Continue For
End If
SetValues(item, entityState)
Next
End If
Next
childValues值是对象,但我知道它是一个导航属性列表。 我可以在vb.net中做到这一点
For Each item In childValues
' Do Stuff
Next
有时,childValues为Entity collection of TEntity
,有时为FixupCollection
。但在这两种情况下,上述代码都运行良好。
现在我想将此代码更改为c#,我不知道该怎么做 可以请有人向我解释vb是如何工作的,我怎样才能在c#中做到这一点?
答案 0 :(得分:1)
首先,您可以将if
替换为.Where
过滤器
navigations.Where(n => n.GetType.GetProperty(n.Name) != null) // nothing?
然后"转换"每个Navigation
进入其子女:
.Select(n => obj.GetType().GetProperty(navigation.Name))
.Select(n => childs.GetValue(obj, null)) // nothing?
然后将if
替换为另一个.Where
过滤器:
.Where(chVals => chVals != null) // nothing?
在迭代之前
.ForEach(chVals =>
chVals.Where(item => item != nothing) // Not sure what nothing means in VB...
.ForEach(item => SetValues(item, entityState))
);