具有Action <T>参数重载的模棱两可的方法调用

在调用具有不同Action<T>变体的重载方法时,我遇到了一些意外的编译器行为

假设我有此类,Test并且正在CallTest构造函数中创建其实例

public class Test
{
    public Test(Action<long> arg)
    {

    }

    public Test(Action<decimal> arg)
    {

    }
}

public class CallTest
{
    public CallTest()
    {
        Test t = new Test(TestDecimal);
    }

    public void TestDecimal(decimal arg)
    {

    }

    public void TestLong(long arg)
    {

    }    
}

Test使用TestDecimalTestLong作为参数调用构造函数时,我收到以下错误:

下列方法或属性之间的调用不明确:“ Test(System.Action<long>)”和“ Test(System.Action<decimal>)

我的猜测是在long之间进行了一些隐式转换decimal,但是还有谁知道我可能做错了什么吗?有什么解决方法吗?

BartoszKP

当您通过TestDecimalTestLong作为参数传递时,实际上是在传递方法组(毕竟,可能有多个TestDecimal方法-它可能已被重载)。因此,在两种情况下都发生隐式转换-从方法组到特定的委托类型因此,这两种方法都是适用的候选方法第7.4.2节)。适用的候选对象中,过载解决算法会尝试找到最佳候选对象。但是,在匹配参数列表时比较转换的规则表明,如果对于这两个候选者都进行隐式转换,则它们都不是更好的

第7.4.2.3节

[...]

否则,两种转换都不会更好。

这就是为什么在您的情况下存在歧义。


解决方法当然是首先显式转换参数:

new Test(new Action<decimal>(TestDecimal))

对于一种情况,这种方法在重载解析期间无需进行隐式转换(因为在强制转换Action<T>类型完全匹配之后),而另一种则必须转换(Action<long>Action<decimal>),并且上述部分指出:

[...]

如果S是T1,则C1是更好的转换。

如果S是T2,则C2是更好的转换。

[...]

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有Action <T>参数重载的模棱两可的方法调用

来自分类Dev

在DbSet <T>上使用LINQ扩展方法时模棱两可的调用

来自分类Dev

重新定义且模棱两可的函数调用具有数组参数

来自分类Dev

使用具有类的合格名称的字符串调用通用模棱两可的方法

来自分类Dev

重载模棱两可(int-> int64_t vs int-> double)

来自分类Dev

带有自己的类和std :: string_view的'operator =='的模棱两可的重载

来自分类Dev

“ uint32_t”的“ long unsigned int”模棱两可的调用

来自分类Dev

具有依赖类型的c ++ 11可变函数模板重载是否模棱两可?

来自分类Dev

父类的私有函数导致子类中具有相同名称和相似参数的公共函数模棱两可的调用

来自分类Dev

摇篮配置。所有模棱两可

来自分类Dev

有没有办法在不进行强制转换的情况下解决模棱两可的方法调用?

来自分类Dev

对于具有==运算符的多个覆盖的类,空检查是模棱两可的

来自分类Dev

解决具有垂直模棱两可约束的TextView

来自分类Dev

具有非恒定大小的字符串数组的模棱两可的编译?

来自分类Dev

错误:对重载函数的模棱两可的调用

来自分类Dev

(C++) 构造函数,默认参数,“调用重载...模棱两可”

来自分类Dev

C ++编译错误:无法从B转换为A,没有构造函数,或者构造函数重载模棱两可

来自分类Dev

为什么此方法重载模棱两可?

来自分类Dev

编译时错误:调用重载方法时模棱两可。为什么?

来自分类Dev

编译时错误:调用重载方法时模棱两可。为什么?

来自分类Dev

@Autowired查找模棱两可的依赖关系,并且仍然有效。如何?

来自分类Dev

如果模棱两可的有限状态机如何工作?

来自分类Dev

打印出模棱两可的摩尔斯电码的所有可能性

来自分类Dev

为什么对模版化函数有一个模棱两可的要求?

来自分类Dev

自动装配模棱两可,但没有使用限定符

来自分类Dev

Swift 中没有更多上下文错误的模棱两可

来自分类Dev

xml验证失败,具有必需的属性和不允许的属性错误,这是模棱两可的

来自分类Dev

SwiftUI Picker选择参数给出“表达式类型'Binding <_>'是模棱两可的,没有更多上下文”错误

来自分类Dev

对继承的模板方法的模棱两可的调用

Related 相关文章

  1. 1

    具有Action <T>参数重载的模棱两可的方法调用

  2. 2

    在DbSet <T>上使用LINQ扩展方法时模棱两可的调用

  3. 3

    重新定义且模棱两可的函数调用具有数组参数

  4. 4

    使用具有类的合格名称的字符串调用通用模棱两可的方法

  5. 5

    重载模棱两可(int-> int64_t vs int-> double)

  6. 6

    带有自己的类和std :: string_view的'operator =='的模棱两可的重载

  7. 7

    “ uint32_t”的“ long unsigned int”模棱两可的调用

  8. 8

    具有依赖类型的c ++ 11可变函数模板重载是否模棱两可?

  9. 9

    父类的私有函数导致子类中具有相同名称和相似参数的公共函数模棱两可的调用

  10. 10

    摇篮配置。所有模棱两可

  11. 11

    有没有办法在不进行强制转换的情况下解决模棱两可的方法调用?

  12. 12

    对于具有==运算符的多个覆盖的类,空检查是模棱两可的

  13. 13

    解决具有垂直模棱两可约束的TextView

  14. 14

    具有非恒定大小的字符串数组的模棱两可的编译?

  15. 15

    错误:对重载函数的模棱两可的调用

  16. 16

    (C++) 构造函数,默认参数,“调用重载...模棱两可”

  17. 17

    C ++编译错误:无法从B转换为A,没有构造函数,或者构造函数重载模棱两可

  18. 18

    为什么此方法重载模棱两可?

  19. 19

    编译时错误:调用重载方法时模棱两可。为什么?

  20. 20

    编译时错误:调用重载方法时模棱两可。为什么?

  21. 21

    @Autowired查找模棱两可的依赖关系,并且仍然有效。如何?

  22. 22

    如果模棱两可的有限状态机如何工作?

  23. 23

    打印出模棱两可的摩尔斯电码的所有可能性

  24. 24

    为什么对模版化函数有一个模棱两可的要求?

  25. 25

    自动装配模棱两可,但没有使用限定符

  26. 26

    Swift 中没有更多上下文错误的模棱两可

  27. 27

    xml验证失败,具有必需的属性和不允许的属性错误,这是模棱两可的

  28. 28

    SwiftUI Picker选择参数给出“表达式类型'Binding <_>'是模棱两可的,没有更多上下文”错误

  29. 29

    对继承的模板方法的模棱两可的调用

热门标签

归档