我有一个这样声明的 Action 委托(delegate)。
private readonly Action<List<PSDPoint>[]> _psdAction;
_psdAction = AddPSDData;
PSDPoint 是一个非常简单的类。
public class PSDPoint
{
public int Frequency { get; set; }
public double Power { get; set; }
}
我正在尝试像这样调用委托(delegate)。
private void PSDData(object sender, PSDEventArgs e)
{
Dispatcher.Invoke(_psdAction, e.Data);
}
PSDEventArgs 看起来像这样。您可以看到 e.Data 是相同的数据类型。
public class PSDEventArgs
{
public List<PSDPoint>[] Data { get; set; }
public string[] Channels { get; set; }
}
_psdAction 指向这个函数。我从来没有达到这个代码。
private void AddPSDData(List<PSDPoint>[] data)
{
...
}
我收到调度员试图调用的错误。我不明白为什么。我正在传递正确的类型。我猜这是拥有一系列列表的“时髦”?
Object of type 'System.Collections.Generic.List`1[DataLogger.Model.PSDPoint]' cannot be converted to type 'System.Collections.Generic.List`1[DataLogger.Model.PSDPoint][]'.
最佳答案
尝试以下
Dispatcher.Invoke(_psdAction, (object)e.Data);
问题是
Invoke
的第二个参数需要一个 params object[]
。这样做的目的是支持具有可变数量参数的委托(delegate)。数组的内容映射到参数。第一个元素指向第一个参数,第二个元素指向第二个参数,依此类推。当您使用
e.Data
调用它时,C# 编译器会看到一个数组。它没有将数组作为第一个参数传递,而是尝试将每个元素作为参数传递。通过强制转换为 object
,您可以强制编译器将其解释为单个参数关于c# - 使用 List<T>[] 的 Action 委托(delegate)的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7114342/