关于c#:是否可以为* any * Action< T>?创建委托

Is it possible to create a delegate for *any* Action<T>?

本问题已经有最佳答案,请猛点这里访问。

我想弄明白为什么这行不通:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void DefaultAction( object obj = null ){}

public void Start()
{
    SomeReferenceType obj;
    DefaultAction( obj ); //works

    int i;
    string s;
    DefaultAction( i ); //works
    DefaultAction( s ); //works
}

//however...

public event Action OnNullAction = DefaultAction; //works
public event Action<SomeReferenceType> OnObjectAction = DefaultAction; //works
public event Action<int> OnIntAction = DefaultAction; //doesn't work!!

尝试将void(object)绑定到Action会引发参数不匹配错误,即使您可以使用int/string/bool直接调用函数。有没有神秘的拳击/拆箱?不管怎样,是否可以创建一个可以响应任何Action的委托?