[英]Cannot implicitly convert type to string
所以,我有一些我正在处理的代码(不是开发人员,但我们处理的是我们已经处理过的手)并且我有一个小但令人沮丧的错误正在弹出,在我努力通过我的方式之后rest 的问题。 在这段代码中:
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;
}
}
C#
(或任何编程语言)function 有一个标准定义,如下所示:
return_type FunctionName (parameter1_type parameter1_name, parameter2_type parameter2_name,...)
{
}
void
,在这种情况下你不需要返回任何东西。 因此,让我们以一个非常简单的 function 为例,它将两个int
作为参数,将它们相加,然后将总和作为int
返回。 它看起来像这样:
int AddTwoInts(int a, int b)
{
int sum = a + b;
return sum;
}
返回类型是int
, sum
也是int
,所以它工作正常。
假设您想添加两个int
,但出于任何原因将总和作为string
返回。 那么您的 function 定义必须如下所示:
string AddTwoIntsAndReturnAsString(int a, int b)
{
// function body
}
但是,在这种情况下,如果您有与以前相同的 function 主体,编译器会报错:
string AddTwoIntsAndReturnAsString(int a, int b)
{
int sum = a + b;
return sum;
}
因为sum
仍然是int
但是 function 希望你返回一个字符串,这是一个冲突,编译器不喜欢这样。 所以它会抱怨。 您可以通过将返回的内容与实际返回类型相匹配来解决此问题。
static string AddTwoIntsAndReturnAsString(int a, int b)
{
int sum = a + b;
return sum.ToString();
}
现在这将消除错误,但并不一定意味着它将解决所有问题。 通常,如果您添加两个数字,您希望结果是数字类型,您可以稍后在其中进行其他计算。 因此,对于添加两个数字的 function 来说,实际返回一个int
而不是string
更有意义。
同样,在您的情况下,您的result
是ObservableCollection<ReportData>
类型。 ObservableCollection
本质上是一个列表。 因此,将其转换为string
并返回只是为了消除错误是没有意义的,因为 function 想要返回上述类型以便稍后完成一些工作。
因此更改函数的返回类型会更有意义:
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;
}
在你的退货声明中试试这个
return result.ToString();
或者你可能想要
return result != null ? "It worked":"It failed";
这应该使问题清楚。 你说这个 function 返回一个字符串,但你返回一个不同的 object 类型。
您必须将返回类型从string
更改为ObservableCollection<ReportData>
或ReportData
(取决于您的需要)。
如果您这样做并且 class 只获取您所说的字符串,那么是的,结果将是字符串。 这就是 generics 的工作原理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.