无法将lambda表达式转换为委托类型'System.Func <T,TKey>'

嬉皮士

我正在写最小堆在那里我希望能够heapify一个泛型类TKey以及T

interface IHeap<T, TKey>
    where TKey : IComparable<TKey>
{
    void Insert(T x);
    T Delete();
    T Top();
}

public class MinHeap<T, TKey> : IHeap<T, TKey>
    where TKey : IComparable<TKey>
{
    public MinHeap(int capacity)
        : this(capacity, x => x) // <---- compilation error here
    { }
    public MinHeap(int capacity, Func<T, TKey> keySelector)
        : this(capacity, keySelector, Comparer<TKey>.Default)
    { }
    public MinHeap(int capacity, Func<T, TKey> keySelector, IComparer<TKey> comparer)
    {
        // ...
    }
    // ...
}

我收到以下编译错误x => x

Cannot convert lambda expression to delegate type 'System.Func<T,TKey>' because some of the return types in the block are not implicitly convertible to the delegate return type.
Cannot implicitly convert type 'T' to 'TKey'

我如何做到这一点并且只有一堂课?

更新:

我希望能够做两件事:

// 1
var minheap = new MinHeap<Person, int>(10, x => x.Age);

// 2
var minheap = new MinHeap<int>(10);
// instead of 
var minheap = new MinHeap<int, int>(10, x => x);
本·亚伦森

MinHeap<T,TKey> 可以使用与约束匹配的任何通用类型参数实例化。

例如,这意味着您可以使用MinHeap<string,int>在这种情况下,你会尝试指派拉姆达x => xFunc<string,int>这是行不通的,因为它是一个Func<string,string>

我认为没有一种明智的方法来实现您想要的目标,因为没有一种很好的方法可以将“任意”类型转换为另一种任意类型,这正是您所需要的。


您可以做的是删除此构造函数,并添加一个静态构造函数,该构造函数可用于TTKey类型相同的情况:

public static class MinHeap
{
    public static MinHeap<T,T> Create<T>(int capacity) where T : IComparable<T>
    {
        return new MinHeap<T,T>(capacity, x => x);
    }
}

但是,如果这还不足以满足您的需求,那么只需删除构造函数,并接受人们必须自己处理lambda的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将lambda表达式转换为委托类型'System.Func <T,TKey>'

来自分类Dev

无法将lambda表达式转换为委托类型'System.Func <char,bool>'

来自分类Dev

无法将Lambda表达式转换为类型'System.Linq.Expressions.Expression',因为它不是委托类型

来自分类Dev

无法将Lambda表达式转换为类型'System.Type',因为它不是委托类型

来自分类Dev

将表达式转换为Expression <Func <T,bool >>

来自分类Dev

在 lambda 表达式中将 Func<T, IConvertible> 的结果转换为 int

来自分类Dev

C#成员表达式Func <T,object>转换为Func <T,bool> MethodBinaryExpression

来自分类Dev

无法将类型为VB $ AnonymousDelegate的对象强制转换为类型System.Func

来自分类Dev

表达式<Func <T,Boolean >> VS Func <T,Boolean>

来自分类Dev

Lambda表达式到Func <T,TResult>

来自分类Dev

将Func <T,TProperty>转换为Expression <Func <T,Property >>

来自分类Dev

存储Func <T>委托

来自分类Dev

无法将类型System.Linq.Expression <System.Func <Object,bool >>隐式转换为bool

来自分类Dev

如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

来自分类Dev

将Lambda表达式转换为Func <IObserver <char>,IDisposable>

来自分类Dev

将Lambda表达式转换为Func <IObserver <char>,IDisposable>

来自分类Dev

无法将Key <T>表达式转换为Key <T>类型?

来自分类Dev

无法从方法组转换为System.Func <string>

来自分类Dev

将Func转换为委托

来自分类Dev

无法将OrderBy(Func <T,IComperable>)转换为SQL

来自分类Dev

无法将类型字符串隐式转换为System.Func <string,int,string,string>

来自分类Dev

Xamarin Android:无法将Java.IO.ByteArrayOutputStream表达式转换为System.IO.Stream类型

来自分类Dev

将lambda字符串表达式转换为Func <string,string>错误:“类型'String'中不存在属性或字段'v'”

来自分类Dev

C#错误:“无法将“ int”转换为“ System.Func <Creature,int>””

来自分类Dev

无法在Linq Lambda表达式中将System.Collections.Generic.IEnumerable转换为bool

来自分类Dev

遍历&&或||之间的每个参数 在Expressions <Func <T,Bool >> Lambda表达式中

来自分类Dev

在Lambda表达式中使用Func <T>并将LinQ应用于实体

来自分类Dev

带有lambda表达式的Func(T,TResult)的离散总和

来自分类Dev

在Lambda表达式中使用Func <T>并使用LinQ到实体

Related 相关文章

  1. 1

    无法将lambda表达式转换为委托类型'System.Func <T,TKey>'

  2. 2

    无法将lambda表达式转换为委托类型'System.Func <char,bool>'

  3. 3

    无法将Lambda表达式转换为类型'System.Linq.Expressions.Expression',因为它不是委托类型

  4. 4

    无法将Lambda表达式转换为类型'System.Type',因为它不是委托类型

  5. 5

    将表达式转换为Expression <Func <T,bool >>

  6. 6

    在 lambda 表达式中将 Func<T, IConvertible> 的结果转换为 int

  7. 7

    C#成员表达式Func <T,object>转换为Func <T,bool> MethodBinaryExpression

  8. 8

    无法将类型为VB $ AnonymousDelegate的对象强制转换为类型System.Func

  9. 9

    表达式<Func <T,Boolean >> VS Func <T,Boolean>

  10. 10

    Lambda表达式到Func <T,TResult>

  11. 11

    将Func <T,TProperty>转换为Expression <Func <T,Property >>

  12. 12

    存储Func <T>委托

  13. 13

    无法将类型System.Linq.Expression <System.Func <Object,bool >>隐式转换为bool

  14. 14

    如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

  15. 15

    将Lambda表达式转换为Func <IObserver <char>,IDisposable>

  16. 16

    将Lambda表达式转换为Func <IObserver <char>,IDisposable>

  17. 17

    无法将Key <T>表达式转换为Key <T>类型?

  18. 18

    无法从方法组转换为System.Func <string>

  19. 19

    将Func转换为委托

  20. 20

    无法将OrderBy(Func <T,IComperable>)转换为SQL

  21. 21

    无法将类型字符串隐式转换为System.Func <string,int,string,string>

  22. 22

    Xamarin Android:无法将Java.IO.ByteArrayOutputStream表达式转换为System.IO.Stream类型

  23. 23

    将lambda字符串表达式转换为Func <string,string>错误:“类型'String'中不存在属性或字段'v'”

  24. 24

    C#错误:“无法将“ int”转换为“ System.Func <Creature,int>””

  25. 25

    无法在Linq Lambda表达式中将System.Collections.Generic.IEnumerable转换为bool

  26. 26

    遍历&&或||之间的每个参数 在Expressions <Func <T,Bool >> Lambda表达式中

  27. 27

    在Lambda表达式中使用Func <T>并将LinQ应用于实体

  28. 28

    带有lambda表达式的Func(T,TResult)的离散总和

  29. 29

    在Lambda表达式中使用Func <T>并使用LinQ到实体

热门标签

归档