2016-04-17 2 views
-1

У меня странный вопрос, но я надеюсь, что кто-то может мне помочь я иметь этот vb.Net кодC# Для каждого на объекте, это IEnumerable

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 S с .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)) 
    ); 
+0

проблема в C# отличает набор childValues ​​для Entity или FixupCollection и Tentity - это динамический прокси-сервер, который я не могу получить. –

+0

ничего не отрицает;) –

+0

благодарим вас за ваш полный ответ. Так что нет необходимости лить в точный тип? как vb это делает? –

Смежные вопросы