繁体   English   中英

无法将类型隐式转换为字符串

[英]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;
    }
}

如果 class 只获取字符串,返回不应该是字符串吗? 但我明白了在此处输入图像描述

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;
}

返回类型是intsum也是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更有意义。

同样,在您的情况下,您的resultObservableCollection<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM