我有这个例子告诉你我在找什么:
private void myMethod(string a = "", string b = "", string c = "")
{
// do things
}
我想找到一种可以像这样调用该方法的方法:
MyParameterObject parameters = new MyParameterObject();
// b is the name of parameter
parameters.AddParameter("b", "b_value");
parameters.AddParameter("c", "c_value");
myMethod(parameters);
答案 0 :(得分:5)
如果方法中所需的所有参数值都是相同的类型(让它为string
),那么您可以将参数作为Dictionary
传递,如下所示:
private void myMethod(Dictionary<string,string> paramDictionary)
{
// do things
}
这样你就可以调用这样的方法:
Dictionary<string,string> paramDictionary = new Dictionary<string,string>();
paramDictionary.Add("b", "b_value");
paramDictionary.Add("c", "c_value");
myMethod(paramDictionary);
答案 1 :(得分:3)
创建键值对并将其传递给函数
List<KeyValuePair<string, string>> kvpList = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("a", "a_value"),
new KeyValuePair<string, string>("b", "b_value"),
new KeyValuePair<string, string>("c", "c_value"),
};
public void myMethod(KeyValuePair<string, string>[] pairs)
{
// Read key value pair
// ...
}
如果已知属性,则创建类并为其指定属性。
答案 2 :(得分:1)
正如其他人所描述的那样,我们真的不知道你的问题是什么,但这里有两种可能性。
首先:使用字典
Dictionary<string,string> paramDictionary = new Dictionary<string,string>();
paramDictionary.Add("b", "b_value");
paramDictionary.Add("c", "c_value");
myMethod(paramDictionary);
第二:创建适合您需求的对象
public class ParameterObject{
private string firstName, lastName;
public string FirstName { get { return firstName; } set { firstName = value; } }
public string LastName { get { return lastName; } set { lastName = value; } }
// and so on
public ParameterObject(){
// leave it empty or create it with parameters
}
}
然后就像在你的例子中一样使用它:
ParameterObject parameters = new ParameterObject();
parameters.setFirstName("b_value");
parameters.setLastName("c_value");
myMethod(parameters);
由于您定义了此Object,因此您可以在以下方法中使用它:
myMethod(ParameterObject parameter){
String firstName = parameter.getFirstName();
String lastName = parameter.getLastName();
}
答案 3 :(得分:1)
您可以使用建议的字典,并使方法调用者从字典中构建参数数组,并从传入的实例中调用该方法。
public static class Invoker
{
public static void Invoke<TClass>(string methodName, Dictionary<string, object> myParameterObject, TClass instance)
{
var method = typeof(TClass).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
var parameters = method.GetParameters().Select(parameter => myParameterObject.ContainsKey(parameter.Name) ? myParameterObject[parameter.Name] : null).ToArray();
method.Invoke(instance, parameters);
}
}
并称之为
var parameters = new Dictionary<string, object> { { "b", "b_value" }, { "c", "c_value" } };
var myClass = new MyClass();
Invoker.Invoke("MyMethod", parameters, myClass);
Console.ReadKey();
假设你的MyClass包含MyMethod
public class MyClass
{
private void MyMethod(string a = "", string b = "", string c = "")
{
Console.WriteLine("a : " + a + " b : " + b + " c : " + c);
}
}
虽然这很容易出错,但作为反思技巧的练习很有用。