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

C# 无法将类型隐式转换为字符串,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,因此,我有一些我正在处理的代码(不是开发人员,但我们处理的是我们已经处理过的那只手),我有一个小错误,但令人沮丧,在我努力解决其余问题之后,它突然出现了。在此代码中: public class ObservableCollection<ReportData> { public string GetQueryData(string date, string ip, string query) { ObservableCollection<Repor

因此,我有一些我正在处理的代码(不是开发人员,但我们处理的是我们已经处理过的那只手),我有一个小错误,但令人沮丧,在我努力解决其余问题之后,它突然出现了。在此代码中:

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;
    }
}
公共类ObservableCollection
{
公共字符串GetQueryData(字符串日期、字符串ip、字符串查询)
{
ObservableCollection结果=新的ObservableCollection();
尝试
{
var数据=GetRemoteQueryJournal(ip、日期、查询);
如果(数据!=null)
{
结果=GetReporData(数据);
}
}
捕获(例外情况除外)
{
Console.WriteLine(例如InnerException.StackTrace);
}
返回结果;
}
}
如果类只获取字符串,那么返回值不应该是字符串吗?但我明白了

在您的返回语句中尝试此选项

        return result.ToString();
或者你想

        return result != null ? "It worked":"It failed";

这应该让问题变得清楚。您说此函数返回一个字符串,但返回的对象类型不同。

您必须将返回类型从
string
更改为
observateCollection
ReportData
(取决于您的需要)

如果您这样做,并且该类只按照您的措辞获取字符串,那么结果将是字符串。泛型就是这样工作的。

一个
C#
(或任何编程语言)函数有一个标准定义,如下所示:

return_type FunctionName (parameter1_type parameter1_name, parameter2_type parameter2_name,...)
{
}
int AddTwoInts(int a, int b)
{
    int sum = a + b;
    return sum;
}
string AddTwoIntsAndReturnAsString(int a, int b)
{
    // function body
}
  • 参数是可选的
  • 返回类型可以是
    void
    ,在这种情况下,您不需要返回任何内容
  • 对于所有其他返回类型,需要返回与返回类型匹配的值

让我们采用一个非常简单的函数,它将两个<代码> INT/COS>S作为参数,将它们相加,并将其作为一个<代码> INT/COD>返回。它看起来是这样的:

return_type FunctionName (parameter1_type parameter1_name, parameter2_type parameter2_name,...)
{
}
int AddTwoInts(int a, int b)
{
    int sum = a + b;
    return sum;
}
string AddTwoIntsAndReturnAsString(int a, int b)
{
    // function body
}
返回类型是
int
,而
sum
也是
int
,因此它工作正常

假设您想添加两个
int
s,但无论出于何种原因,都将总和作为
字符串返回。那么您的函数定义必须如下所示:

return_type FunctionName (parameter1_type parameter1_name, parameter2_type parameter2_name,...)
{
}
int AddTwoInts(int a, int b)
{
    int sum = a + b;
    return sum;
}
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
,更有意义

与此类似,您的
结果
属于
可观察收集类型
observetecollection
本质上是一个列表。因此,将其转换为
字符串
并仅返回以消除错误是没有意义的,因为函数希望返回上述类型以便稍后完成一些工作

因此,更改函数的返回类型更有意义:

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;
}
公共ObservableCollection GetQueryData(字符串日期、字符串ip、字符串查询) { ObservableCollection结果=新的ObservableCollection(); 尝试 { var数据=GetRemoteQueryJournal(ip、日期、查询); 如果(数据!=null) { 结果=GetReporData(数据); } } 捕获(例外情况除外) { Console.WriteLine(例如InnerException.StackTrace); } 返回结果; }
您的
GetQueryData()
函数期望返回一个字符串,但是
result
的类型是
observateCollection
,这是您试图返回的类型。显然,这是不匹配的。在方法体中返回
字符串
,或者将方法签名更改为返回
ObservableCollection
,如果确实要返回,则将函数定义更改为:
公共ObservableCollection GetQueryData(字符串日期、字符串ip、字符串查询)
不要向我们展示你在做什么,因为你所做的毫无意义。这似乎已经解决了问题,正如我所说,我不是开发人员。谢谢!这将消除错误,但我怀疑这将真正解决问题。如果您想返回一个
可观测集合
,将其作为字符串返回是没有用的。@dragos_kai--它可能已经修复了它,但我怀疑它是否是您想要函数做的。我理解这一点,当我实现您提出的解决方案时,我得到了“找不到类型或命名空间'ReportData'(是否缺少using指令或程序集引用?)。