2015-05-04 66 views
0

我有以下方法C#作爲參數方法,其中方法包括裁判paramater

public static void Method1(ref List<int> list) 
{//code to update list} 

是否有可能創建一個採用此方法類似(但不是行動<清單參數的方法>它使用Action <裁判名單>)

public static void Method2(Action<List<int>> otherMethod) 
    {var newList = new List<int>(); otherMethod(newList)} 

我的主要問題是,我的方法使用的參考,同時操作>不採取引用。這可能嗎?

+0

哦,我很樂意看到Method1'的'再執行剖析爲什麼最有可能的'ref'我們完全沒有必要...... –

回答

2

是的,但你不能使用它Action<>/Func<>,你必須建立委託「手動」:

// Your method 
public static void Method1(ref List<int> list) 
{ 
} 

// The delegate 
public delegate void Method1Delegate(ref List<int> list); 

// A method that accepts the delegate and uses it 
public static void Method2(Method1Delegate del) 
{ 
    List<int> list = null; 
    del(ref list); 
} 
+0

這解決了我的問題,謝謝:) –

0
class App 
{ 
    private readonly Dictionary<Type, object> delegateMap; 

    void Add<T>(Action<SomeClass<T>> foo) 
    { 
     object tmp; 
     if (!delegateMap.TryGetValue(typeof(T), out tmp)) 
     { 
       tmp = new List<Action<SomeClass<T>>>(); 
       delegateMap[typeof(t)] = tmp; 
     } 
     List<Action<SomeClass<T>> list = (List<Action<SomeClass<T>>) tmp; 
     list.Add(foo); 
    } 

    void InvokeActions<T>(SomeClass<T> item) 
    { 
     object tmp; 
     if (delegateMap.TryGetValue(typeof(T), out tmp)) 
     { 
      List<Action<SomeClass<T>> list = (List<Action<SomeClass<T>>) tmp; 
      foreach (var action in list) 
      { 
       action(item); 
      } 
     } 
    } 
} 

使用代表。