c#对于每个On对象,它是不可数的

时间:2016-04-17 08:12:15

标签: casting

我有一个奇怪的问题,但我希望有人可以帮助我,我有这个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#中做到这一点?

1 个答案:

答案 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))
    );