我正在尝试在程序中执行错误处理组件类,但不断收到以下错误消息:
错误1方法的类型参数 'Marketplace.ErrorHandlingComponent.Invoke(System.Func,int, System.TimeSpan)'无法从用法中推断出来。尝试指定 显式的类型参数。
我不确定尝试明确指定类型参数是什么意思。
MainWindow.xaml.cs
public void SetPlotList(int filterReference)
{
// Fill plot list view
List<PlotComponent.PlotList> plotList = PlotComponent.SelectPlotLists(filterReference);
// Find the plot list item in the new list
PlotComponent.PlotList selectPlotList =
plotList.Find(x => Convert.ToInt32(x.PlotId) == _focusPlotReference);
Dispatcher.Invoke(
(() =>
{
PlotListView.ItemsSource = plotList;
if (selectPlotList != null)
{
PlotListView.SelectedItem = selectPlotList;
}
}));
int jobSum = 0;
int bidSum = 0;
foreach (PlotComponent.PlotList item in PlotListView.Items)
{
jobSum += Convert.ToInt32(item.Jobs);
bidSum += Convert.ToInt32(item.Bids);
}
// Determine job/bid list ratio
Dispatcher.BeginInvoke(
new ThreadStart(() => JobBidRatioTextBlock.Text = jobSum + " jobs - " + bidSum + " bids"));
}
private void ValidateTextbox()
{
if (Regex.IsMatch(FilterTextBox.Text, "[^0-9]") || FilterTextBox.Text == "") return;
try
{
ErrorHandlingComponent.Invoke(() => SetPlotList(Convert.ToInt32(FilterTextBox.Text)), 3, TimeSpan.FromSeconds(1));
}
catch
{
FilterTextBox.Text = null;
}
}
ErrorHandlingComponent.cs
public static T Invoke<T>(Func<T> func, int tryCount, TimeSpan tryInterval)
{
if (tryCount < 1)
{
throw new ArgumentOutOfRangeException("tryCount");
}
while (true)
{
try
{
return func();
}
catch (Exception ex)
{
if (--tryCount > 0)
{
Thread.Sleep(tryInterval);
continue;
}
LogError(ex.ToString());
throw;
}
}
}
答案 0 :(得分:1)
lambda的内容为SetPlotList(Convert.ToInt32(FilterTextBox.Text))
。
SetPlotList
返回void
,但Invoke
假设提供给它的lambda返回一些(非void)类型。它无法推断lambda返回的类型,因为它不返回类型。 SetPlotList
返回了一些内容,然后Invoke
调用才能正常运行。
答案 1 :(得分:0)
SetPlotList
是一种void方法,但ErrorHandlingComponent.Invoke
期望Func<T>
作为其第一个参数。它需要调用Func并返回func的返回值。由于你试图传递一个void方法,编译器会抱怨。