gpt4 book ai didi

c# - 转换 Func<> 类型

转载 作者:太空狗 更新时间:2023-10-29 17:46:41 25 4
gpt4 key购买 nike

Cannot convert type 'System.Func<int,bool>' to 'System.Func<object,bool>'

尝试将 f2 转换为 f1:

    Func<object, bool> f1 = x => true;
Func<int, bool> f2 = x => true;
f1 = (Func<object, bool>)f2;

尝试了 map 函数来解决,但是这次我得到了

Argument 1: cannot convert from 'C' to 'A' 

异常。关于变换(a)函数

    Func<int, bool> f3 = Map(f2, x => x);

Func<C, B> Map<A, B, C>(Func<A, B> input, Func<A, C> transform)
{
return x => input(transform(x));
// return x => input(transform((A)x)); not working
}

有解决办法吗?

最佳答案

这应该有效:

f1 = p => f2((int)p);

当然,使用这个 f1将产生 InvalidCastException如果你传递给它一些不能转换为 int 的东西.

如果输入类型为 f2,则可以创建通用实用函数来执行此操作继承自 f1 的输入类型(在您的示例中是正确的 - int 派生自 object ):

static Func<TOut, TR> ConvertFunc<TIn, TOut, TR>(Func<TIn, TR> func) where TIn : TOut
{
return p => func((TIn)p);
}

然后你可以像这样使用它:

f1 = ConvertFunc<int, object, bool>(f2);

但这并不比我的第一个示例更简洁,而且我认为第二种方法的可读性不如第一个。


顺便说一句,有可能得到你的Map()如果您以正确的顺序放置类型参数,则编译方法:

static  Func<TNewIn, TOut> Map<TOrigIn, TNewIn, TOut>(Func<TOrigIn, TOut> input, 
Func<TNewIn, TOrigIn> convert)
{
return x => input(convert(x));
}

你可以这样调用它:

f1 = Map(f2, (object x) => (int)x);

您需要明确指出 NewIn类型,因为编译器无法推断它。

关于c# - 转换 Func<> 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14599763/

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