次のコードを検討してください。
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
as Object を持ち、ISpecific
type を介してのみ持つspecificFuncAsObject.GetType()