2017-08-03 88 views
2

我有这样的例子来告诉你我在寻找:如何将参数作为单个对象传递?

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

'List '? – Liam

+1

只需定义一个可容纳3个字符串的对象?问题在哪里? – Nico

+0

我猜测有一个可变数量的参数@Nico? – Liam

回答

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); 
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 
    // ... 
} 

如果属性称为然后创建类和属性分配给它。

+0

我会强调最后一句话,这是最好的解决方案(如果属性确实已知) – EpicKip

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); 
myMethod(ParameterObject parameter){ 

String firstName = parameter.getFirstName(); 
String lastName = parameter.getLastName(); 

} 
+0

@ un-lucky提出的字典是最好的选择,也非常感谢您的建议。 – Adnand

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

虽然这是非常容易出错,但作为反思技能的练习有用。

相关问题