使用别名时无法隐式转换类型错误

时间:2015-03-02 20:55:08

标签: c# .net generics alias

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

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

然后在我班上我有一本字典:

private Dictionary<String, CreationFunction> creators;

但是,当我尝试在contstructor中初始化它时,如下所示:

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<string,Func <Microsoft.Xna.Framework.Vector2, GAShooter.Entity>类型隐式转换为'Dictionary<String, CreationFunction>'

类型

1 个答案:

答案 0 :(得分:3)

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

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

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

了解更多here