1

J'essaye d'obtenir toutes les propriétés publiques dans le type ci-dessous. Dans .NET Framework, je serais à l'aide que IsPublic à partir du type PropertyInfo mais cela ne semble pas exister dans .NET Core 2.Équivalent de PropertyInfo.IsPublic dans .NET Core 2.0

internal class TestViewModel 
{ 
    public string PropertyOne { get; set; } 
    public string PropertyTwo { get; set; } 
} 

//how can I retrieve an IEnumerable with PropertyOne and PropertyTwo ONLY? 
var type = typeof(TestViewModel); 
var properties = type.GetProperties().Where(p => /*p.IsPublic &&*/ !p.IsSpecialName); 
+0

@mjwills pas un doublon depuis SO réponse recommande TypeExtensions, qui ne fonctionne pas avec .NET Core 2.0 (apparantly). – NullBy7e

+0

@mjwills Je suis en faute ici, j'ai édité la question et l'ai rendue plus claire. – NullBy7e

Répondre

1

Une alternative est d'utiliser l'élément de propriété, en tant que tel ..
Programmer().GetType().GetProperties().Where(p => p.PropertyType.IsPublic && p.DeclaringType == typeof(Programmer));

public class Human 
    { 
     public int Age { get; set; } 
    } 

    public class Programmer : Human 
    { 
     public int YearsExperience { get; set; } 
     private string FavLanguage { get; set; } 
    } 

Ceci retourne avec succès seulement le public int YearsExperience.

+0

Cela ne semble pas fonctionner, il retourne toutes les propriétés publiques de tous les types hérités. – NullBy7e

+0

@ NullBy7e mise à jour de réponse. –

+0

Merci, cela semble fonctionner! Bien que la réponse ci-dessous fonctionne également, je vais marquer la vôtre comme la réponse depuis que vous avez une réputation inférieure. – NullBy7e

2

Vous pouvez utiliser des drapeaux de liaison comme dans « classique » .NET

//how can I retrieve an IEnumerable with PropertyOne and PropertyTwo ONLY? 
    var type = typeof(TestViewModel); 
    var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); 
+0

Ne semble pas fonctionner, l'énumération est vide avec seulement 'BindingFlags.Public' et il contient toutes les propriétés publiques, y compris les onces héritées quand ce sont les deux indicateurs. – NullBy7e

+0

Cette méthode fonctionne comme prévu. Si vous voulez obtenir seulement les propriétés déclarées dans 'TestViewModel' (pas hérité), vous devez utiliser' var propriétés = type.GetProperties (BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); ' –

+0

J'ai marqué la réponse ci-dessus comme solution, le vôtre fonctionne aussi mais il avait une réputation inférieure, est-ce bien? Sinon, je ne saurais pas comment choisir ... – NullBy7e

0
internal class TestViewModel 
{ 
    public string PropertyOne { get; set; } 
    public string PropertyTwo { get; set; } 

    private string PrivateProperty { get; set; } 
    internal string InternalProperty { get; set; } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     //how can I retrieve an IEnumerable with PropertyOne and PropertyTwo ONLY? 
     var type = typeof(TestViewModel); 

     var properties = type.GetProperties(); 

     foreach (var p in properties) 
      //only prints out the public one 
      Console.WriteLine(p.Name); 
    } 
} 

Vous pouvez spécifier:

BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance 

pour obtenir d'autres types