Nat*_*222 1 c# generics iqueryable
所以,我有以下代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是ListGames方法.(LookupGame方法只是包含在我正在做的事情的某些上下文中.)
我不能为我的生活弄清楚如何操纵事物来获得一个可以获得IQueryable的结果.我尝试过很多东西,包括.AsQueryable()方法,各种各样的东西,等等.
任何洞察我出错的地方都将不胜感激.
您的代码中存在多个问题:
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();
}
Run Code Online (Sandbox Code Playgroud)