如果我有一个委托,然后在其中添加几个方法,如何分别存储每个返回值?
例如,我有如下所示的内容,该怎么做才能同时使用这两个方法的两个值,以便可以在PlayWithDelegate方法中显示它们,我是否只是设置了一个静态数组并将结果存储在那里或是否还有其他值方式?
public delegate string EnterName();
internal class Class1
{
//Our delegate
public delegate string EnterName();
static void Main(string[] args)
{
EnterName testname = Getname;
testname += GetAge;
PlayWithDelegate(testname());
}
private static string GetAge()
{
Console.WriteLine("Please enter your age : ");
string result = Console.ReadLine();
if (result == "") result = " a mystery";
return result;
}
private static void PlayWithDelegate(string name)
{
Console.WriteLine( "your name is {0} and age is {1}",name, name );
Console.ReadLine();
}
public static string Getname( )
{
Console.WriteLine("Please enter your name : ");
string result = Console.ReadLine();
if (result == "") result = " a mystery";
return result;
}
}
您可以将它们存储为单独的值。我对您的解决方案做了一些修改。
在您的代码中,您正在将函数委托重新分配给另一个,因此它将替换先前的值。这就是为什么结果仅显示年龄而不是名称和年龄的原因。
在修改后的代码中,我确保将两个委托都分配给函数,并使它们分开,然后在PlayWithDelegate
函数中调用这些委托。
public delegate string UserInput();
internal class Class1
{
static void Main(string[] args)
{
UserInput name = Getname;
UserInput age = GetAge;
PlayWithDelegate(name, age);
}
private static string GetAge()
{
Console.WriteLine("Please enter your age : ");
string result = Console.ReadLine();
if (result == "") result = " a mystery";
return result;
}
private static void PlayWithDelegate(UserInput name, UserInput age)
{
Console.WriteLine("your name is {0} and age is {1}", name(), age());
Console.ReadLine();
}
public static string Getname()
{
Console.WriteLine("Please enter your name : ");
string result = Console.ReadLine();
if (result == "") result = " a mystery";
return result;
}
}
您还提到可能将结果存储到某种类型的集合中,您也可以这样做...
public delegate string UserInput();
internal class Class1
{
static void Main(string[] args)
{
UserInput[] inputs = new UserInput[] { Getname, GetAge };
string[] results = inputs.Select(func => func()).ToArray();
PlayWithDelegate(results);
}
private static string GetAge()
{
Console.WriteLine("Please enter your age : ");
string result = Console.ReadLine();
if (result == "") result = " a mystery";
return result;
}
private static void PlayWithDelegate(string[] results)
{
Console.WriteLine("your name is {0} and age is {1}", results[0], results[1]);
Console.ReadLine();
}
public static string Getname()
{
Console.WriteLine("Please enter your name : ");
string result = Console.ReadLine();
if (result == "") result = " a mystery";
return result;
}
}