我正在尝试调用另一个被调用方法的返回类中的方法。
我正在尝试从ConnectionProfile
类调用GetConnectionCost()方法。通过从NetworkInformation类调用ConnectionProfile
方法返回GetInternetConnectionProfile
对象。
到目前为止,我的代码如下:
using System.Reflection;
var t = Type.GetType("Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType=WindowsRuntime");
var profile = t.GetTypeInfo().GetDeclaredMethod("GetInternetConnectionProfile").Invoke(null, null);
var cost = profile.GetTypeInfo().GetDeclaredMethod("GetConnectionCost").Invoke(null, null); //This does not work of course since profile is of type object.
我很少在代码中使用反射,所以我不是这方面的专家,但我试图找到一种方法来对profile
对象进行处理并在其上调用GetConnectionCost
方法。
任何建议
答案 0 :(得分:1)
GetInternetConnectionProfile
是静态的,但GetConnectionCost
是一种实例方法。
您需要将实例传递给Invoke
试试这个:
var t = Type.GetType("Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType=WindowsRuntime");
var profile = t.GetMethod("GetInternetConnectionProfile").Invoke(null, null);
var cost = profile.GetType().GetMethod("GetConnectionCost").Invoke(profile, null);
您仍会获得object
。
您可以将其投放到dynamic
答案 1 :(得分:0)
找到解决方案:
var networkInfoType = Type.GetType("Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType=WindowsRuntime");
var profileType = Type.GetType("Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType=WindowsRuntime");
var profileObj = networkInfoType.GetTypeInfo().GetDeclaredMethod("GetInternetConnectionProfile").Invoke(null, null);
dynamic profDyn = profileObj;
var costObj = profDyn.GetConnectionCost();
dynamic dynCost = costObj;
var costType = (NetworkCostType)dynCost.NetworkCostType;
if (costType == NetworkCostType.Unknown
|| costType == NetworkCostType.Unrestricted)
{
//Connection cost is unknown/unrestricted
}
else
{
//Metered Network
}