所以,我有以下代码:
private readonly Dictionary<string, IGame> _gameLookup = new Dictionary<string, IGame>();
public T LookupGame<T>(string name) where T : IGame
{
if (name == null) throw new ArgumentNullException("name");
Type t = typeof(T);
if (_gameLookup.Any(d => d.Key == name))
{
return (T)_gameLookup[name];
}
var newInstance = (T)AppDomain.CurrentDomain.GetUnityContainer().Resolve(t, name);
if (newInstance != null)
{
_gameLookup.Add(name, newInstance);
return newInstance;
}
return default(T);
}
public IQueryable<T> ListGames<T>() where T : IGame
{
var games = _gameLookup.Where(d => d.GetType() == typeof (T));
return (IQueryable<T>) games;
}
我的问题在于ListGames方法。 (LookupGame方法只是包含在我正在做的事情的某些上下文中。)
我不能为我的生活弄清楚如何操纵事物来获得一个可以获得智商的结果。我尝试了很多东西,包括.AsQueryable()方法,投射各种东西等等。
任何洞察我出错的地方都将不胜感激。
答案 0 :(得分:5)
您的代码中存在多个问题:
GetType
上致电KeyValuePair<string, IGame>
,(因为_gameLookup
是一个字典,所以实现IEnumerable<KeyValuePair<string, IGame>>
它是d
的类型,而显然你想要在价值观上使用它。games
)后的类型为IEnumerable<KeyValuePair<string, IGame>>
,因此您需要删除KeyValuePair
部分AsQueryable
。固定代码:
public IQueryable<T> ListGames<T>() where T : IGame
{
return _gameLookup.Values
.OfType<T>()
.AsQueryable();
}
答案 1 :(得分:0)
结果类型为IEnumerable<Type>
,您无法转换为IQueryable<T>
(不是通过简单的转换)
您可以尝试AsQueryable()
:
return games.AsQueryable();