13

私はC#とXAMLでWindows8アプリケーションを書いています。同じタイプの多くのプロパティがあり、コンストラクターで同じ方法で設定されているクラスがあります。各プロパティを手動で記述して割り当てるのではなく、クラスで特定のタイプのすべてのプロパティのリストを取得し、それらをすべてforeachに設定したいと思います。

「通常の」.NETではこれを書きます

var properties = this.GetType().GetProperties();
foreach (var property in properties)
{
    if (property.PropertyType == typeof(Tuple<string,string>))
    property.SetValue(this, j.GetTuple(property.Name));
}

ここjで、はコンストラクターのパラメーターです。WinRTにGetProperties()は存在しません。Intellisense forthis.GetType().は、私が使用できる有用なものを何も示していません。

4

2 に答える 2

16

GetRuntimeProperties代わりに使用する必要がありますGetProperties

var properties = this.GetType().GetRuntimeProperties();
// or, if you want only the properties declared in this class:
// var properties = this.GetType().GetTypeInfo().DeclaredProperties;
foreach (var property in properties)
{
    if (property.PropertyType == typeof(Tuple<string,string>))
    property.SetValue(this, j.GetTuple(property.Name));
}
于 2012-11-02T15:00:35.907 に答える
6

これを試して:

public static IEnumerable<PropertyInfo> GetAllProperties(this TypeInfo type)
{
    var list = type.DeclaredProperties.ToList();

    var subtype = type.BaseType;
    if (subtype != null)
        list.AddRange(subtype.GetTypeInfo().GetAllProperties());

    return list.ToArray();
}

次のように使用します。

var props = obj.GetType().GetTypeInfo().GetAllProperties();

更新:この拡張メソッドは、同じであるが組み込みメソッドであるGetRuntimePropertiesために使用できない場合にのみ使用してください。GetRuntimeProperties

于 2012-11-11T21:48:56.470 に答える