我是学习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>'
答案 0 :(得分:3)
我认为问题出在您的别名定义中,您应该将其更改为
using CreationFunction = System.Func<Microsoft.Xna.Framework.Vector2, GAShooter.Entity>;
创建一个使用别名,以便更容易将标识符限定为 命名空间或类型。必须使用alias指令的右侧 无论使用指令如何,始终是完全限定类型 来到它之前。
了解更多here。