gpt4 book ai didi

c# - 可移植类库和反射

转载 作者:可可西里 更新时间:2023-11-01 08:39:43 25 4
gpt4 key购买 nike

我正在同时为桌面、Windows 8 应用商店和 Windows Phone 构建新应用程序。所以我创建了可移植类库以在所有平台上具有通用功能。我的问题是,当我尝试在 PCL 中重用我的代码时,我无法访问库中的某些方法和属性。根据 MSDN 的说法,这些方法是受支持的,但我现在知道为什么我无法访问它们。

        var property = memberExpression.Member as PropertyInfo;
if (property == null)
{
}

var getMethod = property.GetGetMethod(true);
if (getMethod.IsStatic)
{}

这是无法编译的代码片段。 GetGetMethod 和 IsStatic 在 Visual Studio 编辑器中是红色的。我不知道为什么会这样,也不知道如何访问这些属性。

所以如果有人做过类似的事情,请帮助我编译这段代码。

最佳答案

我们对适用于 Windows 应用商店应用的 .NET 反射 API 进行了一些重构。请参阅博文 Evolving the Reflection API了解详情。除此之外,API 的变化让我们在未来获得更好的可移植性。新的 API 在 Windows 应用商店应用程序、.NET 4.5 和 Windows Phone 8 中可用。为了兼容性,旧的 API 当然在 .NET 4.5 和 Windows Phone 8 上仍然可用。

对于可移植类库,如果您 支持新反射 API 的平台,那么您将只获得新 API。如果您添加不支持新 API 的平台,那么您将获得这些 API。

PropertyInfo.GetGetMethod() 不是新 API 的一部分,因此您应该改用 PropertyInfo.GetMethodMethodInfo.IsStatic 是新 API 的一部分,您在 Visual Studio 中看到红色波浪线的原因是它不知道 getMethod 是什么类型,因为您使用了 var 和GetGetMethod() 未被识别。

因此,您的代码应如下所示:

    var property = memberExpression.Member as PropertyInfo;
if (property == null)
{
}

var getMethod = property.GetMethod;
if (getMethod != null && getMethod.IsStatic)
{}

关于c# - 可移植类库和反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061291/

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