gpt4 book ai didi

vb.net - 如何在 Windows Store/WP8/WinRT 的可移植类库中使用反射?

转载 作者:行者123 更新时间:2023-12-04 23:58:30 24 4
gpt4 key购买 nike

我需要找到一个等效于以下代码的可移植库:

    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 是有效类型,但我不知道如何填充它。有什么建议?

最佳答案

对于 Windows 8/Windows Phone 8,许多反射功能已移至新的 TypeInfo 类。您可以找到更多信息 in this MSDN doc .有关包括运行时属性(例如包括继承的属性)在内的信息,您可以使用新的 RuntimeReflectionExtensions class以及(可以通过 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);
}
}

关于vb.net - 如何在 Windows Store/WP8/WinRT 的可移植类库中使用反射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13677822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com