gpt4 book ai didi

c# - 如何将采用派生类型参数的委托(delegate)转换为具有基本类型参​​数的委托(delegate)?

转载 作者:太空狗 更新时间:2023-10-29 21:01:53 25 4
gpt4 key购买 nike

考虑代码:

public interface IGeneral {}
public interface ISpecific : IGeneral {}
public Func<IGeneral, String> Cast(Object specificFuncAsObject) {
var generalFunc = specificFuncAsObject as Func<IGeneral, String>;
Assert.IsNotNull(generalFunc); // <--- casting didn't work
return generalFunc;
}

Func<ISpecific, String> specificFunc = specific => "Hey!";
var generalFunc = Cast(specificFunc);

有没有办法让这样的类型转换工作?我知道 IGeneral 在一般情况下不能转换为 ISpecific。但在我的特殊情况下,我希望我能做这样的事情:

 Func<IGeneral, String> generalFunc = new Func<IGeneral, String>(general => specificFunc(general as ISpecific));

但是将 specificFunc 作为 Object 并且仅通过 specificFuncAsObject.GetType() 具有 ISpecific 类型

最佳答案

T 中的 Func<T, TResult> (输入类型)是 contravariant, not covariant ,所以这样的事情不可能直接发生。但是,您可以执行以下操作:

Func<ISpecific, String> specificFunc = specific => "Hey!";
Func<IGeneral, String> generalFunc = general => specificFunc((ISpecific)general);

或者相反:

Func<IGeneral, String> generalFunc = general => "Hey!";
Func<ISpecific, String> specificFunc = generalFunc;

关于c# - 如何将采用派生类型参数的委托(delegate)转换为具有基本类型参​​数的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18880244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com