2017-08-03 91 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); 
    } 
} 

雖然這是非常容易出錯,但作爲反思技能的練習有用。

相關問題