我需要投一个Action<string>来Action<object>.虽然这通常是类型不安全的,但在我的情况下,它总是会被一个字符串调用.我收到这个错误:
Unable to cast object of type 'System.Action1[System.String]' to type 'System.Action1[System.Object]'.
有线索吗?反思是公平的游戏.将一个代表包装到另一个代表中则不然.
更新:我创建了一个新的问题,为属性setter或getter创建一个高性能的开放委托,更好地解释我的问题,并使用我想改进的包装解决方案
首先,它不安全.可以接受任何字符串的东西不能(必然)接受任何对象.想想一个示例方法:
void method(String s)
{
s.Trim();
}
Run Code Online (Sandbox Code Playgroud)
显然,如果s是没有的对象,这将失败Trim.
从技术上讲,这意味着Action在T上是逆变的.你可以指定Action<string>一个假设的Action<SubclassString>参考,但string不能被子类化.
确实,C#允许定期不安全的强制转换(例如object本身string),冒险的风险InvalidCastException.但是,他们选择不为不安全的委托演员表实现基础设施.
编辑:我不知道没有包装器的方法.