2015-03-02 75 views
2

我是學習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

什麼是錯誤的全文?這應該工作。 – SLaks 2015-03-02 20:56:52

+5

提供錯誤消息的確切文本,以及完整的代碼示例並演示所描述的問題。 – Servy 2015-03-02 20:57:13

+0

@RufusL請確保您的編輯不會使問題變得更糟,通過將其轉換爲引用,您可以移除查看< >標記中的內容的能力。 – 2015-03-02 21:08:00

回答

3

我認爲這個問題是在您的別名定義,您應該將其更改爲

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

創建一個使用別名,以便更容易地將標識符限定爲 名稱空間或類型。無論使用指令 如何,使用別名指令的右側必須始終爲完全限定類型。

閱讀全文here

+1

這樣做!謝謝! – user3355098 2015-03-02 21:14:29

+2

@ user3355098:或者在你的'namespace'中移動別名 – SLaks 2015-03-02 21:21:45

相關問題