2017-08-30 3 views
0

J'essaie d'invoquer une méthode située dans la classe retournée d'une autre méthode appelée.C# Coulée d'un objet renvoyé à partir de l'invocation et invocation d'une méthode sur cet objet

J'essaie d'appeler la méthode GetConnectionCost() de la classe ConnectionProfile. L'objet ConnectionProfile a été renvoyé en appelant la méthode GetInternetConnectionProfile à partir de la classe NetworkInformation.

est mon code ci-dessous jusqu'à présent:

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. 

J'utilise rarement la réflexion dans mon code, donc je ne suis pas un expert en la matière, mais je suis en train de trouver un moyen de cas, l'objet profile et invoquer la GetConnectionCost méthode à ce sujet.

Toutes les suggestions

Répondre

1

GetInternetConnectionProfile est statique, mais GetConnectionCost est une méthode d'instance.

Vous devez passer une instance à Invoke

Essayez ceci:

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); 

Vous toujours retourner un object.

Vous pouvez le jeter aux dynamic

+0

c'est exactement ce que je l'ai fait il y a 5 secondes. Merci d'avoir répondu –

0

trouvé une solution:

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 
      }