如何创建接受不同参数类型的通用函数
How to create a common function accepting different parameter type
考虑以下代码:
var list = new SomeServiceType
{
Url = "htp://www.test.com/",
Credentials = new NetworkCredential(UserName, Password)
};
这段代码已经重复了很多次,据说有 10 次。因此,我决定在传递不同类型时使用接受上述代码的通用函数。
我需要获取 Url 和 Credentials 作为新创建函数的响应。
作为参考,SomeServiceType 是 ServiceNowType,
UserName 和 Password 是 String 类型。
我试过
public List<object>(....strucked here...)
{
...
return ...//again strucked here....(neeed to return url and credentials)..
}
url 是字符串类型,NetworkCredential 是 c# class
您可以在 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;
}
可以使用反射和激活器来创建方法,如下
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);
考虑以下代码:
var list = new SomeServiceType
{
Url = "htp://www.test.com/",
Credentials = new NetworkCredential(UserName, Password)
};
这段代码已经重复了很多次,据说有 10 次。因此,我决定在传递不同类型时使用接受上述代码的通用函数。
我需要获取 Url 和 Credentials 作为新创建函数的响应。
作为参考,SomeServiceType 是 ServiceNowType, UserName 和 Password 是 String 类型。
我试过
public List<object>(....strucked here...)
{
...
return ...//again strucked here....(neeed to return url and credentials)..
}
url 是字符串类型,NetworkCredential 是 c# class
您可以在 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;
}
可以使用反射和激活器来创建方法,如下
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);