压缩多个readlines的方法?

时间:2015-01-28 21:24:12

标签: c# readline

我对编程很陌生,所以除了我到目前为止在c#课程中所做的事情之外,我不了解自己,但我已经到处寻找一种方法来浓缩阅读线以便程序将连续读取许多输入,而无需为用户输入的每个变量编写readline。

        Console.WriteLine("Enter ID for Jane Doe: ");
        c.ID = Console.ReadLine();

        Console.WriteLine("Enter Insurance Name for Jane Doe: ");
        c.Insurance = Console.ReadLine();

        Console.WriteLine("Enter Height(In.) for Jane Doe: ");
        c.Height = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Enter Weight(lbs.) for Jane Doe: ");
        c.Weight = Convert.ToSingle(Console.ReadLine());

        Console.WriteLine("Enter Health Status for Jane Doe: ");
        c.HealthStatus = Console.ReadLine();

这个例子来自一些不久前的一些作业,但是我无法找到一种方法来压缩代码。 基本上我希望能够在一个令牌中询问所有信息,然后只使用一个readline /其他方法输入每个变量,其中用户键入一个变量的信息,点击输入,然后重复但是经常需要。有没有办法做到这一点,或者我只需要处理重复?

5 个答案:

答案 0 :(得分:7)

一般来说,你需要处理重复。它清晰,易于调试,而且真的不那么糟糕

现在,您可以这样做:

public class InputRequest
{
     public String Request {get; set;}
     public Action InputMethod {get; set;}
}

然后你会像这样创建:

List<InputRequest> allInputs = new List<InputRequest>();
allInputs.Add(new InputRequest() { Request = "Enter your height", 
    InputMethod = new Action(() => currentPerson.Height = Convert.ToInt32(Console.ReadLine())));

然后你可以迭代它们:

foreach (InputRequest req in allInputs)
{
    Console.WriteLine(req.Request);
    req.InputMethod();
}

但实际上,为了稍微小一点的代码,这会消除很多可读性。我可能会在不同的上下文中使用这样的模式,但是在这里,你的代码很好。

答案 1 :(得分:3)

老实说,据我所知,情况并不好。您可以尝试将其用于可读性/可重用性

public String promtUser(String prompt)
{
    Console.WriteLine(prompt + ": ");
    return Console.ReadLine()
}

简单且可重复使用。虽然不完美。

答案 2 :(得分:1)

如果我问了很多问题并且它们是针对少数数据类型的响应,我可能会使用以下内容:

    var answer1 = AskString("Give me a string:");
    var answer2 = AskInt   ("Give me an int:");
    var answer3 = AskSingle("Give me a single:");

使用以下支持方法

    Single AskSingle(string text)
    {
        Console.WriteLine(text);
        return Convert.ToSingle(Console.ReadLine());
    }

简单易读。除非有几个问题,否则我不会打扰。还可以在“Ask”方法中包含您期望的数据类型的验证代码。例如,如果你期望一个int并获得一个字符串,你可以给用户一个机会重新输入它,或者向它们抛出一个错误。

答案 3 :(得分:0)

是的,我害怕!无论如何,最好的方法是,你总是可以读取一个字符串,然后拆分它,但这将涉及额外的处理和更多的时间..这种方式将是

Console.WriteLine("Please enter info in the following format");
Console.WriteLine("ID Name Height Weight Status");

data = Console.ReadLine();
var info = data.Split(" ");
c.Id = info[0];
c.Insurance = info[1];
c.Height = int.Parse(info[2]);

etc...

你拥有它的方式你可以做额外的处理,如

int value;
do
{
    Console.WriteLine("Enter Height");
}
while(int.TryParse(Console.ReadLine(), out value))

这将使您的用户保持循环,直到他们输入有效身高

答案 4 :(得分:0)

对于偶然使用,其中可读性优于紧凑性,您可以尝试这样的方法来对单行输入进行简单的多字段解析。

Console.Write("Enter the following info for Jane Doe, separated by commas:\n" +
              "    ID, Insurance Name, Height(in.), Weight(lbs.), Health Status.\n" +
              "==> ");
string input = Console.ReadLine();

char[] separators = {','};
string[] values = input.Split(separators);
c.ID           = (values.Count() >= 1) ? values[0].Trim() : null;
c.Insurance    = (values.Count() >= 2) ? values[1].Trim() : null;
c.Height       = (values.Count() >= 3) ? values[2].Trim() : null;
c.Weight       = (values.Count() >= 4) ? values[3].Trim() : null;
c.HealthStatus = (values.Count() >= 5) ? values[4].Trim() : null;