2016-12-02 4 views
0
public class MyModel 
    { 
     [Required] 
     public string Name { get; set; } 

     public AddressModel Address { get; set; } 

     ... 
    } 

Ist es irgendwie möglich zu überprüfen, ob AddressModel eine neue Klasse ist? Wenn neue Klasse muss ich einige Prüfungen tun ...C# prüfen, ob die Eigenschaft neue Klasse mit Eigenschaften innerhalb

Durch neue Klasse meine ich

public class AddressModel { 

[Required] 
public string Street{ get; set; } 


... 
} 

so nicht nur Objekt, sondern auch, wenn nach innen hat Eigenschaften ...

+4

Könnten Sie bitte etwas mehr erklärend über neue Klasse sein? –

+0

Meinst du, ist es schon lange so geblieben? Wenn dies der Fall ist, übergeben Sie die ID aus dem Persistenzspeicher, wenn sie dem Standardwert entspricht, ist sie noch nicht im Speicher vorhanden, andernfalls tut sie dies. – Igor

+0

'typeof (MyModel) .GetProperty (" Adresse ",/* binding flags -Instanz * /). PropertyType' Dies gibt den Typ der Eigenschaft zurück und Sie können überprüfen, ob der Eigenschaftswert der Standardwert oder etwas ist. –

Antwort

0

Ich werde versuchen, Beantwortung dieser Teil: (der Rest mir nicht klar ist)

so nicht nur Objekt, sondern auch, wenn nach innen hat Eigenschaften ...

könnten Sie prüfen, ob die Typeigenschaften mithilfe von Reflektion hat:

Console.WriteLine(typeof(AddressModel).GetProperties().Count()); 

dies auch möglich ist, eine Instanz dieser Klasse mit:

AddressModel model = new AddressModel(); 
Console.WriteLine(model.GetType().GetProperties().Count()); 
+0

In diesem Fall möglicherweise 'MyModel myModel = new MyModel(); if (myModel.Address! = null) {/ * Führe eine Reflektion auf myModel.Address.GetType() * /} durch, aber das benötigt Klarheit von OP, da die Frage keinen Sinn ergibt. – ColinM

+0

@ColinM du hast recht, ich habe die Reichweite meiner Antwort eingeschränkt –

0

Ihre Frage ist sehr vage auch wenn während Test sollten wir es vor allem sein. aufmerksam zu Details. Z.B. vorstellen Klassen

public abstract class WeirdModel { 
    // It's not me who implement this readonly property 
    protected abstract String Something {get;} 
} 

public class EerieModel { 
    // write-only banned property 
    [Obsolete("Do not call obsolete properties!", true)] 
    public string DoNotCallMe(set {...}) 
} 

public class PrivateModel { 
    // That's for me only 
    private string PersonalInfo {get; set;} 
} 

public class StaticModel { 
    // One property for all instances 
    public static string CommonInfo {get; set;} 
} 

Glauben Sie, dass diese Klasse zu sein neue diejenigen? In jedem Fall, dass Sie Eigenschaften erhalten müssen, ausfiltern und schließlich prüfen, ob jede eine solche Eigenschaft definiert ist:

var isNew = typeof(AddressModel) 
    .GetProperties(BindingFlags.Instance | BindingFlags.Public) 
    .Where(property => property.CanRead && property.CanWrite) 
    .Where(property => property.GetAccessors().All(method => !method.IsAbstract))  
    //TODO: put more conditions on properties if you want 
    ... 
    .Any(); 
Verwandte Themen