C#转换从调用返回的对象并在该对象上调用方法

时间:2017-08-30 10:49:09

标签: c# windows reflection

我正在尝试调用另一个被调用方法的返回类中的方法。

我正在尝试从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方法。

任何建议

2 个答案:

答案 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
            }