2017-10-18 32 views
-2

我有一個包含string鍵的字典,例如: 123456789。現在在我的應用程序中的其他位置,我希望我的字典查看這個鍵,並且運行方法本身(存儲在鍵上)或以某種方式返回該函數,以便我可以手動添加參數。這甚至有可能嗎?C#字典存儲操作/方法

+1

是。爲什麼不可能? – CalC

+0

是的,其實很簡單。你可以設定你想要的代表的類型(例如'Action','Predicate'等)。 –

+0

爲什麼不能禁用重力? @ Cal279 – John

回答

3

聽起來像一個簡單的任務。 (不包括健全檢查)

Dictionary<string,Action<object>> dict; 

public Action<object> GetFunction(string key) 
{ 
    return dict[key]; 
} 

public void CallFunction(string key, object parameter) 
{ 
    dict[key](parameter); 
} 
1

你需要創建一個dictionary<string, Action>,這將是沒有參數。

例如

static class MyActions { 
    static Dictionary<string,Action> wibble = new Dictionary<string,Action>(); 
} 

我已經使用了靜態,如果您可以傳遞引用/檢索引用,則不需要靜態。

然後加入行動...

MyActions.wibble["123456789"] =() => { // do action }; 

或引用一個無參數方法

MyActions.wibble["123456789"] =() => MyMethod; 

然後調用它;

MyActions.wibble["123456789"]() 

假設鍵存在,你可以嘗試使用得到,甚至MyActions.wibble["123456789"]?.Invoke()

如果您需要的參數,使Action<T>類型或Action<T1, T2>等根據參數的數量的字典。

wibble = new Dictionary<string,Action<int>>()

然後wibble["123456789"] = x => {action with x}

wibble["123456789"](42)