Προς το περιεχόμενο

Anonymous type to Named type (net)


Evgenios1

Προτεινόμενες αναρτήσεις

Δημοσ.

Αυτό φαντάζομαι θέλεις να το κάνεις για να το επιστρέψεις σε μέθοδο σωστα?

 

Μπορείς να το πετύχεις μέσω του Type Inference. Σχετικά μπορείς να βρεις στο συγκεκριμένο blog

 

Αν δεν εννοείς αυτό, διευκρίνισε λίγο παραπάνω.

Δημοσ.

Μπα... Λεει μονο για casting απο anonymous σε anonymous.

> class Program
   {
       static void Main(string[] args)
       {
           var an1 = new {val=1 };
           var an2 = new {val=2 };
           an2 = Cast(an1, an2);
           Console.WriteLine(an2.val);
           Console.Read();
       }
       static T Cast<T>(object o, T type) where T : class
       {
           return (T)o;
       }
   }

 

Εχω ψαξει στο codeproject και ειδα ο,τι το κανουν με reflection και ετσι εκανα αυτο

>public static class Ex
   {
       public static T LinqTo<T>(this object anonymous)
       {
           object obj;
           Type knowedType = typeof(T);
           Type unknowType = anonymous.GetType();
           obj = Activator.CreateInstance(knowedType);
           foreach (var item in unknowType.GetProperties())
           {
               var p = knowedType.GetProperty(item.Name);
               if (p != null)
                   Move(anonymous, item, obj, p);
               var f = knowedType.GetField(item.Name);
               if (f != null)
                   Move(anonymous, item, obj, knowedType.GetField(item.Name));
           }
           return (T)obj;
       }
       static void Move(object fromObj, PropertyInfo fromProp, object toObj, PropertyInfo toProp)
       {
           object value = fromProp.GetValue(fromObj, null);
           toProp.SetValue(toObj, value, null);
       }
       static void Move(object fromObj, PropertyInfo fromProp, object toObj, FieldInfo toField)
       {
           object value = fromProp.GetValue(fromObj, null);
           toField.SetValue(toObj, value);
       }
   }

Θελω να ξερω αν υπαρχει αλλος τροπς εκτος του reflection.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...