C# 不能返回,因为它有错误的返回类型

时间:2021-04-19 11:42:36

标签: c#

我最近开始编程,但遇到了麻烦。我想知道如何将 intdoublestring 与代表一起使用。每次我混合它们时,我都会收到错误 CS0407。我有一些示例,但它们仅在代表内部使用 int。提前致谢。

using System;

namespace _8pirmas
{
    class Program
    {
        public delegate string IsvedimoEiliskumas(string v, string p, string s, int am, int pat);

        static string vardas(string a, string b, string c, int d, int e) { return a; }
        static string pavarde(string a, string b, string c,int d, int e) { return b; }
        static string specialybe(string a, string b, string c,int d, int e) { return c; }
        static int amzius(string a, string b, string c, int d, int e) { return d; }
        static int patirtis(string a, string b, string c, int d, int e) { return e; }

        static void Main(string[] args)
        {
            IsvedimoEiliskumas[] funkcija = new IsvedimoEiliskumas[3];
      
            string v, p, s;
            int am, pat;
 
            int pasirinkimas = 1;

            Console.WriteLine($"Įveskite darbuotojo informaciją.");
        
            v = Console.ReadLine();
            p = Console.ReadLine();
            s = Console.ReadLine();
            Console.WriteLine("Įveskite amžių: ");
            am = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Įveskite stažą: ");
            pat = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine($"Kaip norėtumėte išdėstyti šią informaciją?");
            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine($"{i + 1} zingsnis: (1)Vardas, (2)Pavarde, (3)Specialybe, 
(4)Amzius, (5)Patirtis, (6)Atlyginimas");
                pasirinkimas = Convert.ToInt32(Console.ReadLine());
                switch(pasirinkimas)
                {
                    case 1: funkcija[i] = vardas; break;
                    case 2: funkcija[i] = pavarde; break;
                    case 3: funkcija[i] = specialybe; break;
                    case 4: funkcija[i] = amzius; break;
                    case 5: funkcija[i] = patirtis; break;
                }
            }

            for (int i = 0; i< 3; i++)
                Console.WriteLine($"Atsakymas {i + 1} veiksmo { funkcija[i](v, p, s, am , pat)}");
            
            Console.ReadKey();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

让我们看看 specialybeamzius 方法。

 static string specialybe(string a, string b, string c,int d, int e) ...
 static int amzius(string a, string b, string c, int d, int e) ...     

这些方法有不同的签名(一个返回字符串,另一个返回 int),所以你不能混合和匹配它们。

由于您仅将响应用作文本,因此最好的方法是 .ToString() d & e 允许所有方法的签名保持相同。

 static string specialybe(string a, string b, string c,int d, int e) { return c; }
 static string amzius(string a, string b, string c, int d, int e) { return d.ToString(); }
 static string patirtis(string a, string b, string c, int d, int e) { return e.ToString(); }
       

答案 1 :(得分:0)

componentDidMount() { this.props.getProducts(); let getValue = localStorage.getItem("userData"); this.setState({ getValue: JSON.parse(getValue), }); } 就像方法接口:你必须匹配它们的确切签名,包括返回类型。由于委托 delegates 的返回类型是 IsvedimoEiliskumas,因此任何实现委托的方法也必须具有返回类型 string(以及所有相同的方法参数类型,按顺序)。< /p>

从您的代码中,stringamzius 的返回类型 (patirtis) 与 int 不同。要解决此问题,您有两种选择:

1.更改实现方法签名的返回类型

更改 IsvedimoEiliskumasamzius,使其返回 patirtis。最简单的实现如下所示:

string

2.使您的委托通用

要在您的委托中支持多种返回类型,请使其通用:

static string amzius(string a, string b, string c, int d, int e) { return d.ToString(); }
static string patirtis(string a, string b, string c, int d, int e) { return e.ToString(); }

您现在可以从满足 public delegate T IsvedimoEiliskumas<T>(string v, string p, string s, int am, int pat); 的方法或 lambda 中返回您想要的任何内容。缺点是,在您的示例中,您必须在 IsvedimoEiliskumas 的声明中指定具体类型 并且您仍然需要更改您的实现方法以匹配其签名:

funkcija

要完成这项工作,您需要将 // Still errors on amzius and patirtis, and you have same issue IsvedimoEiliskumas<string>[] funkcija = new IsvedimoEiliskumas<string>[3]; // Now errors on vardas, pavarde, and specialybe instead IsvedimoEiliskumas<int>[] funkcija = new IsvedimoEiliskumas<int>[3]; // Errors on everything, but we are more abstract than string or int IsvedimoEiliskumas<object>[] funkcija = new IsvedimoEiliskumas<object>[3]; 中使用的每个方法更改为具有返回类型 funkcija。然后,您可以在需要时将其转换为原始类型。

旁注:在您仅使用方法来实现委托的情况下,您可以直接将委托实例构造为 lambda:

object

答案 2 :(得分:-1)

您的委托有一个 string 的返回类型,在最后两个方法中,您将返回类型设置为 int

enter image description here

如果您还没有 Visual Studio,请安装,这是值得的。 IDE(即 Visual Studio)出现错误。

enter image description here