2016-05-30 160 views
0

考慮下面的代碼:如何創建一個通用的函數接受不同的參數類型

var list = new SomeServiceType 
{ 
    Url = "htp://www.test.com/", 
    Credentials = new NetworkCredential(UserName, Password) 
}; 

此代碼已經重複很多人說的10倍。所以,我決定在通過不同類型時使用一個通用函數來接受上面的代碼。

我需要獲得Url憑證作爲新創建函數的響應。

作爲參考,SomeServiceType是ServiceNowType, UserName和Password是String類型。

我試着用

public List<object>(....strucked here...) 
{ 
    ... 
    return ...//again strucked here....(neeed to return url and credentials).. 
} 

網址是字符串類型的NetworkCredential是C#類的

+0

如何,因爲我在這個問題提到返回響應? – StackOverflow

+0

你想返回列表變量不是嗎? –

+0

是的,需要返回列表。 – StackOverflow

回答

2

您可以使用反射和激活創建方法,如下

public T MyMethod<T>(string url, string userName, string userPassword) { 
     var myService = Activator.CreateInstance(typeof(T)); 
     System.Reflection.PropertyInfo URL = myService.GetType().GetProperty("Url"); 
     System.Reflection.PropertyInfo NetworkCred = myService.GetType().GetProperty("Credentials"); 
     URL.SetValue(myService, url, null); 
     NetworkCred.SetValue(myService, new System.Net.NetworkCredential(userName, userPassword), null); 
     return (T)myService; 
    } 

呼叫作爲

var list = MyMethod<SomeServiceType>(url,userName,userPassword); 
+0

正是我需要的。謝謝,偉大的解決方案 – StackOverflow

+0

真的你是'c#國王'.. – StackOverflow

+0

非常好的答案。 –

0

你可以在asp.net不喜歡這些。

 public static List<SomeServiceType> MyFunction(string url, string UserName, string Password) 
     { 
      List<SomeServiceType> list = new List<SomeServiceType>(); 
      if (url != null && UserName != null && Password != null) 
      { 
       list = new SomeServiceType() 
       { 
        Url = "htp://www.test.com/", 
        Credentials = new NetworkCredential(UserName, Password) 
       }; 
      } 
      return list; 
     } 
+0

這不能給解決方案。 – StackOverflow

+0

hi @StackOverflow,我只是給你一個如何得到你想要的輸出的例子,因爲我沒有你的正確數據,我不能給你確切的代碼。 – Bharat

+0

好的..謝謝你的例子.. – StackOverflow

相關問題