从一个方法返回多个值C#

时间:2016-02-10 18:56:49

标签: c# methods

对重复的问题抱歉,我看到了类似的问题并且感到困惑。我有一个方法,提示用户输入5个不同的属性值,并希望返回选择的值,以便以后在程序中做出决定。

while (true)
{
    Console.Write("Please enter a value between 0-10 for ingenuity: ");
    inputIngenuity = Console.ReadLine();
    if (!UInt32.TryParse(inputIngenuity, out validIngenuity))
    {
        Console.WriteLine();
        Console.WriteLine("Input was not a valid value for ingenuity.");
    }
    else if (validIngenuity < 0 || validIngenuity > 10)
    {
        Console.WriteLine();
        Console.WriteLine("Input was not a valid value for ingenuity.");
    }
    else if (validIngenuity > (attributePoints - validStrength - validIntelligence - validPersonality - validSpeed))
    {
        Console.WriteLine();
        Console.WriteLine("You do not have enough attribute points remaining.");
    }
    else break;
}
Console.WriteLine();
Console.WriteLine("You have " + (attributePoints - validStrength - validSpeed - validPersonality - validIntelligence - validIngenuity) + " attribute points remaining");
Console.WriteLine();
Console.WriteLine(String.Format("Strength Value     =   {0}", validStrength));
Console.WriteLine(String.Format("Speed Value        =   {0}", validSpeed));
Console.WriteLine(String.Format("Intelligence Value =   {0}", validIntelligence));
Console.WriteLine(String.Format("Personaility Value =   {0}", validPersonality));
Console.WriteLine(String.Format("Ingenuity Value    =   {0}", validIngenuity));
Console.WriteLine();
Console.WriteLine("These are your attributes!");

while (true)
{

    Console.Write("Do you accept these? Type 1 for Yes, Type 2 for No. If No then choose again:  ");
    areYouHappyWithChoices = Console.ReadLine();
    if (!UInt32.TryParse(areYouHappyWithChoices, out validChoices))
        Console.WriteLine("Please try again. Enter 1 for Yes and 2 for No");
    else if (validChoices > 2 || validChoices < 1)
        Console.WriteLine("Please try again. Enter 1 for Yes and 2 for No");
    else if (areYouHappyWithChoices == "2")
        chooseAttributePoints(); //this method contains the whole routine
    else
        Console.WriteLine("We may now begin the game!");
    break;
}
UInt32[] attributePointArray = new UInt32[5] { validStrength, validSpeed, validIntelligence, validPersonality, validIngenuity };
return attributePointArray;

在其他4个属性的方法中重复了ingenuity的while语句,并且没有问题。我想象以后的代码会根据用户的强大程度而产生不同的结果。尝试将值放入数组中,我是否朝着正确的方向前进?谢谢。

2 个答案:

答案 0 :(得分:5)

这将是一种方法,但我认为你最好创建一个类或结构来表示数据。通过这种方式,您可以保持强大的类型&#34;和数据的上下文,而不仅仅是数组索引。

示例:

public class Person
{
    public int Strength { get; private set; }
    public int Speed { get; private set; }
    public int Intel { get; private set; }
    public int Personality { get; private set; }
    public int Ingenuity { get; private set; }

    public Person (int strength, int speed, int intel, int personality, int ingenuity)
    {
        this.Strength = strength;
        this.Speed = speed;
        this.Intel = intel;
        this.Personality = personality;
        this.Ingenuity = ingenuity;
    }
}

然后你对数组的任务:

UInt32[] attributePointArray = new UInt32[5] { validStrength, validSpeed, validIntelligence, validPersonality, validIngenuity };
        return attributePointArray;

更新为:

return new Person(validStrength, validSpeed, validIntelligence, validPersonality, validIngenuity);

,您的返回类型需要从uint[]更改为Person

这样,您不必记住returnedArray[1]是速度(或其他) - 您只需使用returnedPerson.Speed

答案 1 :(得分:3)

您应该创建一个包装要返回的属性的对象类型。方法的返回类型将是新创建的对象类型。

相关问题