【问题标题】:Cannot implicitly convert in async method [duplicate]无法在异步方法中隐式转换[重复]
【发布时间】:2015-01-15 14:13:18
【问题描述】:

以下代码无法编译,我不明白为什么

namespace ImplicitConversion
{
    struct Wrapper<T>
    {
        public static implicit operator Wrapper<T> (T input)
        {
            return new Wrapper<T> ();
        }
    }

    interface IFoo
    {
    }

    class Foo:IFoo
    {
    }

    class MainClass
    {
        public static void Main (string[] args)
        {       
        }

        static Wrapper<IFoo> Test ()
        {
            IFoo foo = new Foo ();
            return foo; // Cannot implicitly convert type 'ImplicitConversion.IFoo' to 'ImplicitConversion.Wrapper<ImplicitConversion.IFoo>' (CS0029) (ImplicitConversion)
        }
    }
}

为什么我不能使用隐式转换?

【问题讨论】:

  • 这实际上与它是异步方法没有任何关系。无论是Task&lt;Wrapper&lt;IFoo&gt;&gt; 还是Wrapper&lt;IFoo&gt;,此转换都会失败
  • 另外,看来 serdar 是对的,你不能从接口隐式转换:stackoverflow.com/a/143567/526704
  • @DLeh 你是对的。我已经编辑了问题
  • 我也打算使用 dupehammer,但对此:stackoverflow.com/questions/1208796/…

标签: c# .net implicit-conversion


【解决方案1】:

正如 DLeh 所说,这与异步无关。

AFAIK 接口无法转换(隐式或显式)。

详情请看这个答案:https://stackoverflow.com/a/143567/526704

【讨论】:

  • 是的,C# 规范中的 6.4.4。 (另外,如果你删除泛型,你会得到一个明确的“用户定义的接口转换”错误。)
  • 我已经修改了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 2011-08-18
相关资源
最近更新 更多