无法从 'System.Collections.Generic.IEnumerable<string>' 转换为 'T'
cannot convert from 'System.Collections.Generic.IEnumerable<string>' to 'T'
我希望这是我完全想念的非常简单的东西,但我似乎无法弄清楚这里需要更改什么。
cannot convert from System.Collections.Generic.IEnumerable<string>
to T
编译错误来自这里的这个块,特别是item.DataItem:
public List<ImportItem<T>> ProcessReportResult(CSVTable resultData, ICollection<ImportItem<T>> data, Func<T, IEnumerable<string>> keyFilter)
{
WriteLog("{1}{0} records found.{1}", resultData.Rows.Length, Environment.NewLine);
//key = Order Number; value = Order ID
var idDictionary = resultData.Rows.Select((row => row.Split(','))).ToLookup(id => id[0], id => id[1]);
idDictionary.ForEach(id => WriteLog("Input Id = {0} - Matching record Id = {1}", id.Key));
var processList = data.Where(item => idDictionary.Contains(keyFilter(item.DataItem))).ToList();
processList.ForEach(item => item.Id = idDictionary[keyFilter(item.DataItem)]);
return processList;
DataItem 的声明来自此 class 此处:
public class ImportItem<T> : INotifyPropertyChanged
{
public IEnumerable<string> DataItem
{
get; set;
}
private bool visible;
public bool Visible
{
get { return visible; }
set
{
visible = value;
RaisePropertyChanged("Visible");
}
}
public string ErrorMessage { get; set; }
public IEnumerable<string> Id
{
get; set;
}
public Status Status { get; set; }
public ImportItem(T item)
{
DataItem = (IEnumerable<string>) item;
visible = true;
}
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
什么是keyFilter?我猜它是 returns IEnumerable,这意味着它的 Dictionary 上没有 Contains() 重载。您可能需要以下内容:
var processList =
data.Where(item => keyFilter(item.DataItem).Any(key => idDictionary.ContainsKey(key))).ToList()
我希望这是我完全想念的非常简单的东西,但我似乎无法弄清楚这里需要更改什么。
cannot convert from
System.Collections.Generic.IEnumerable<string>
toT
编译错误来自这里的这个块,特别是item.DataItem:
public List<ImportItem<T>> ProcessReportResult(CSVTable resultData, ICollection<ImportItem<T>> data, Func<T, IEnumerable<string>> keyFilter)
{
WriteLog("{1}{0} records found.{1}", resultData.Rows.Length, Environment.NewLine);
//key = Order Number; value = Order ID
var idDictionary = resultData.Rows.Select((row => row.Split(','))).ToLookup(id => id[0], id => id[1]);
idDictionary.ForEach(id => WriteLog("Input Id = {0} - Matching record Id = {1}", id.Key));
var processList = data.Where(item => idDictionary.Contains(keyFilter(item.DataItem))).ToList();
processList.ForEach(item => item.Id = idDictionary[keyFilter(item.DataItem)]);
return processList;
DataItem 的声明来自此 class 此处:
public class ImportItem<T> : INotifyPropertyChanged
{
public IEnumerable<string> DataItem
{
get; set;
}
private bool visible;
public bool Visible
{
get { return visible; }
set
{
visible = value;
RaisePropertyChanged("Visible");
}
}
public string ErrorMessage { get; set; }
public IEnumerable<string> Id
{
get; set;
}
public Status Status { get; set; }
public ImportItem(T item)
{
DataItem = (IEnumerable<string>) item;
visible = true;
}
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
什么是keyFilter?我猜它是 returns IEnumerable,这意味着它的 Dictionary 上没有 Contains() 重载。您可能需要以下内容:
var processList =
data.Where(item => keyFilter(item.DataItem).Any(key => idDictionary.ContainsKey(key))).ToList()