4

ポータブル ライブラリで使用するために、次のコードに相当するものを見つける必要があります。

    Public Overridable Function GetPropertyValue(ByVal p_propertyName As String) As Object
        Dim bf As System.Reflection.BindingFlags
        bf = Reflection.BindingFlags.IgnoreCase Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic
        Dim propInfo As System.Reflection.PropertyInfo = Me.GetType().GetProperty(p_propertyName, bf)
        Dim tempValue As Object = Nothing

        If propInfo Is Nothing Then
            Return Nothing
        End If

        Try
            tempValue = propInfo.GetValue(Me, Nothing)

        Catch ex As Exception
            Errors.Add(New Warp10.Framework.BaseObjects.BaseErrorMessage(String.Format("Could not Get Value from Property {0}, Error was :{1}", p_propertyName, ex.Message), -1))
            Return Nothing
        End Try

        Return tempValue

    End Function

BindingFlags が存在しないようです。System.Reflection.PropertyInfo は有効な型ですが、入力方法がわかりません。助言がありますか?

4

1 に答える 1

7

Windows 8/Windows Phone 8 では、この Reflection 機能の多くが新しい TypeInfo クラスに移動されました。詳細については、この MSDN docを参照してください。ランタイム プロパティ (たとえば、継承されるものを含む) を含む情報については、新しいRuntimeReflectionExtensions クラスも使用できます (フィルタリングは LINQ を介して簡単に実行できます)。

これは C# コードですが (申し訳ありません :))、この新しい機能を使用したかなり同等のコードを次に示します。

public class TestClass
{
    public string Name { get; set; }

    public object GetPropValue(string propertyName)
    {
        var propInfo = RuntimeReflectionExtensions.GetRuntimeProperties(this.GetType()).Where(pi => pi.Name == propertyName).First();
        return propInfo.GetValue(this);
    }
}

クラス自体で宣言されたプロパティのみを気にする場合、このコードはさらに単純になります。

public class TestClass
{
    public string Name { get; set; }

    public object GetPropValue(string propertyName)
    {
        var propInfo = this.GetType().GetTypeInfo().GetDeclaredProperty(propertyName);
        return propInfo.GetValue(this);
    }
}
于 2012-12-06T00:47:52.880 に答える