1

以下のタイプのすべてのパブリックプロパティを取得しようとしています。 .NET Frameworkの 私はPropertyInfoタイプからIsPublicを使用したものにいただきたいが、それは2.NET Core 2.0のPropertyInfo.IsPublicに相当します。

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ない複製を取得します。 – NullBy7e

+0

@mjwills私はここで不調です、私は質問を編集し、それをより明確にしました。 – NullBy7e

答えて

1

代替のような、PropertyTypeは部材を使用することである..
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; } 
    } 

これは、public int YearsExperienceのみを正常に返します。

+0

それは動作していないようです。すべての継承された型からすべてのパブリックプロパティを返します。 – NullBy7e

+0

@ NullBy7e更新された回答。 –

+0

ありがとう、それは動作するようです!下の回答も有効ですが、あなたの評判は低いので、私はあなたの回答を答えにします。 – NullBy7e

2

.NETのコアには存在していないようだあなたは「古典」.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

動作していないようで、列挙は 'BindingFlags.Public'のみで空であり、両方のフラグであるときに継承されたoncesを含むすべてのpublicプロパティを含みます。 – NullBy7e

+0

このメソッドは正常に動作します。 'TestViewModel'(継承されていない)で宣言されたproperetiesだけを取得したい場合は、' var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); ' –

+0

を使用してください。解決策、あなたも同様に動作しますが、彼は評判が低いです、それは問題ありませんか?そうでなければ、私はどのように選択するのか分からないでしょう... – 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); 
    } 
} 

を指定できます:

BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance 

をそのSOの答えは、.NETのコア2.0(apparantly)では動作しませんTypeExtensionsを推奨していますので、他の種類の

関連する問題