2013-03-05 13 views
5
public class ConflictSaver 
{ 
    private readonly IEnumerable<CommonJobDataInfo> _conflictingJobData; 
    private readonly DataAccessDataContext _dc; 

    public ConflictSaver(IEnumerable<CommonJobDataInfo> conflictingJobData, DataAccessDataContext dc) 
    { 
     _conflictingJobData = conflictingJobData; 
     _dc = dc; 
    } 

    public void Save() 
    { 
     foreach (var data in _conflictingJobData) 
     { 
      var type = data.ClientBaseObject.GetType(); 
      var formattedProperty = data.Property.Trim('.').ToUpper(); 
      foreach (var property in type.GetProperties()) 
      { 
       var currentProperty = data.ClientBaseObject.GetType().GetProperties().First(t => t.Name.Trim() == property.Name.Trim()); 

       if(currentProperty.Name.ToUpper()== formattedProperty) 
       { 
        if (data.UseServerValue) 
         currentProperty.SetValue(currentProperty, data.ServerValue, null); 
        else 
         currentProperty.SetValue(currentProperty, data.ClientValue, null); 
       } 
      } 

     } 
    } 
} 

uzyskać obiektu nie pasuje do typu docelowego w funkcji Save(), gdy próbuję zadzwonić setValue(). Cuchnę w refleksji.obiektu nie pasuje do typu docelowego, gdy próbuje użyć setValue

Odpowiedz

3

Wygląda używasz złego przeciążenie i przechodzącą niewłaściwy obiekt:

if (data.UseServerValue) 
    currentProperty.SetValue(data.ClientBaseObject, data.ServerValue); 
else 
    currentProperty.SetValue(data.ClientBaseObject, data.ClientValue); 

Obiekt należący do data.ClientBaseObject, więc powinno być celem wywołania. Nie ma ideka dla tej właściwości, więc if you are on .NET 4.5 or later, można pominąć trzeci parametr łącznie.

+0

kiedy to skompiluję, mówi "Bez przeciążenia, weź 2 parametry". Spróbuję go z pustym hasłem. –

+0

@DJBurb Ah, nie zdawałem sobie sprawy, że przeciążenie 2-arg jest tylko .NET 4.5! Przeciążenie z 'null' powinno działać. – dasblinkenlight

+0

Tak, używam 4.0 –

Powiązane problemy