所以,我有一些正在处理的代码(不是开发人员,但我们处理已经处理过的手),在我挣扎了我的努力之后,我弹出了一个小但令人沮丧的错误解决其余问题的方法。在此代码中:
public class ObservableCollection<ReportData>
{
public string GetQueryData(string date, string ip, string query)
{
ObservableCollection<ReportData> result = new ObservableCollection<ReportData>();
try
{
var data = GetRemoteQueryJournal(ip, date, query);
if (data != null)
{
result = GetReporData(data);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException.StackTrace);
}
return result;
}
}
答案 0 :(得分:2)
C#
(或任何编程语言)函数具有一个标准定义,如下所示:
return_type FunctionName (parameter1_type parameter1_name, parameter2_type parameter2_name,...)
{
}
void
,在这种情况下,您无需返回任何内容。因此,让我们采用一个非常简单的函数,该函数接受两个int
作为参数,将它们相加,然后将总和作为int
返回。看起来像这样:
int AddTwoInts(int a, int b)
{
int sum = a + b;
return sum;
}
返回类型为int
,而sum
也是int
,因此可以正常工作。
假设您要添加两个int
,但无论出于何种原因,都将总和作为string
返回。然后,您的函数定义必须如下所示:
string AddTwoIntsAndReturnAsString(int a, int b)
{
// function body
}
但是,在这种情况下,如果您具有与以前相同的函数体,则编译器会抱怨:
string AddTwoIntsAndReturnAsString(int a, int b)
{
int sum = a + b;
return sum;
}
因为sum
仍然是int
,但是该函数希望您返回一个字符串,这是一个冲突,并且编译器不喜欢这样。所以会抱怨。您可以通过匹配返回的实际返回类型来解决此问题。
static string AddTwoIntsAndReturnAsString(int a, int b)
{
int sum = a + b;
return sum.ToString();
}
现在这将消除错误,但不一定意味着可以解决所有问题。通常,如果您将两个数字相加,则希望结果为数字类型,以后可以进行其他计算。因此,对于将两个数字相加的函数,实际返回int
而不是string
更为有意义。
类似地,您的result
的类型为ObservableCollection<ReportData>
。 ObservableCollection
本质上是一个列表。因此,将其转换为string
并返回以消除错误是没有意义的,因为该函数希望返回上述类型,以便稍后完成一些工作。
因此,更改函数的返回类型会更有意义:
public ObservableCollection<ReportData> GetQueryData(string date, string ip, string query)
{
ObservableCollection<ReportData> result = new ObservableCollection<ReportData>();
try
{
var data = GetRemoteQueryJournal(ip, date, query);
if (data != null)
{
result = GetReporData(data);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException.StackTrace);
}
return result;
}
答案 1 :(得分:1)
在您的退货声明中尝试此操作
return result.ToString();
或者也许你想要
return result != null ? "It worked":"It failed";
这应该使问题清楚。您说此函数返回一个字符串,但返回的是不同的对象类型。
答案 2 :(得分:0)
您将不得不将返回类型从string
更改为ObservableCollection<ReportData>
或ReportData
(取决于您的需要)。
如果您执行此操作,并且该类仅获得您所声明的字符串,那么结果将为字符串。这就是泛型的工作方式。