我正在尝试使用linq过滤C#中的Chord对象(类)列表。
我的课程中有以下功能
public List<Chord> FilterDictionary_byKey<Chord>(string theKey)
{
var filteredList = from item in _chords
where item.KeyName == theKey
select item;
return (List<Chord>)filteredList;
}
在上面的Chord中是一个对象类型,_chords是List类型的类变量。
然后从我的调用代码中我尝试了以下内容:
List<Chord> theChords = globalVariables.chordDictionary.FilterDictionary_byKey("A");
显然是尝试从类
返回已过滤的Chord对象列表然而,当我编译编译器时返回
错误1无法从用法推断出方法'ChordDictionary.chordDictionary.FilterDictionary_byKey(string)'的类型参数。尝试显式指定类型参数。 C:\ Users \ Daniel \ Development \ Projects \ Tab Explorer \ Tab Explorer \ Forms \ ScaleAndChordViewer.cs 75 37 Tab Explorer
答案 0 :(得分:2)
from
... select
LINQ查询的推断类型实际上是IEnumerable<T>
,它不是填充的列表或集合,而是将按需枚举的序列。将其强制转换为List<T>
不会导致此枚举;相反,您应该致电ToList()
或ToArray()
。
要解决您遇到的错误:您的方法声明不应具有泛型类型参数,因为其返回类型或其任何参数都不是通用的。只需删除方法名称后面的<Chord>
。
public List<Chord> FilterDictionary_byKey(string theKey)
{
var filteredList = from item in _chords
where item.KeyName == theKey
select item;
return filteredList.ToList();
}
答案 1 :(得分:1)
List<Chord> theChords = globalVariables.chordDictionary.FilterDictionary_byKey<Chord>("A");