我最近开始编程,但遇到了麻烦。我想知道如何将 int
、double
和 string
与代表一起使用。每次我混合它们时,我都会收到错误 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();
}
}
}
答案 0 :(得分:1)
让我们看看 specialybe
和 amzius
方法。
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>
从您的代码中,string
和 amzius
的返回类型 (patirtis
) 与 int
不同。要解决此问题,您有两种选择:
更改 IsvedimoEiliskumas
和 amzius
,使其返回 patirtis
。最简单的实现如下所示:
string
要在您的委托中支持多种返回类型,请使其通用:
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)