【问题标题】:cannot implicitly convert type error when using aliases使用别名时无法隐式转换类型错误
【发布时间】:2015-03-02 20:55:08
【问题描述】:

我是学习 C# 的新手,并且来自 C++ 背景。我以下列方式使用别名:

using CreationFunction = Func<Microsoft.Xna.Framework.Vector2, GAShooter.Entity>;

然后在我的课堂上我有一本像这样的字典:

private Dictionary<String, CreationFunction> creators;

但是,当我尝试像这样在构造函数中初始化它时:

creators = new Dictionary<String, CreationFunction>();

我得到一个错误。它说它不能隐式转换类型。是什么赋予了?

编辑:完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using CreationFunction = Func<Microsoft.Xna.Framework.Vector2, GAShooter.Entity>;

namespace GAShooter
{
    class EntityFactory
    {
        private Dictionary<String, CreationFunction> creators;

        public EntityFactory()
        {
            creators = new Dictionary<String, CreationFunction>();
        }

        public void RegisterCreator(String name, CreationFunction function)
        {
            creators[name] = function;
        }

        public Entity Create(String name)
        {
            var creator = creators[name];
            return creator();
        }
    }
}

错误的全文是:

无法将类型 'Dictionary&lt;string,Func &lt;Microsoft.Xna.Framework.Vector2, GAShooter.Entity&gt; 隐式转换为类型 'Dictionary&lt;String, CreationFunction&gt;'

【问题讨论】:

  • 错误的全文是什么?那应该可以。
  • 提供错误消息的确切文本,以及一个完整的代码示例并演示所描述的问题。
  • @RufusL 请确保您的编辑不会使问题变得更糟,通过将其转换为引号,您将无法查看 标记中的内容。
  • @ScottChamberlain 哦,谢谢 - 我会注意的!
  • @user3355098 你的例子仍然很差。它要求应答者安装并准备好使用 XNA。您可以轻松地创建一个使用 Func&lt;object, object&gt; 的玩具控制台程序并演示相同的问题,并且其他用户复制到 VS 并直接运行会容易 100 倍。

标签: c# .net generics alias


【解决方案1】:

我认为问题出在您的别名定义中,您应该将其更改为

using CreationFunction = System.Func<Microsoft.Xna.Framework.Vector2, GAShooter.Entity>;

创建一个使用别名,以便更容易地将标识符限定为 命名空间或类型。 using alias 指令的右侧必须 无论 using 指令如何,始终是完全限定类型 在它之前。

阅读更多here

【讨论】:

  • @user3355098:或者将别名移动到您的namespace
猜你喜欢
  • 2014-02-12
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多