【问题标题】:Dynamic Input direct from user in console直接来自用户在控制台中的动态输入
【发布时间】:2021-11-23 09:41:33
【问题描述】:

在下面的代码中;

for (int i = 0; i < 5; i++)
        {
            dynamic x;
            x = Console.ReadLine(); //readline methode returns string.
            Console.WriteLine(x.GetType().ToString());
        }

我试着做一个简单的概念,用户想输入 5 个不同类型的元素数据然后每次都会显示出来。

问题是,ReadLine 将始终以字符串形式返回值,我可以使用 convert 但仍然会强制用户输入唯一的转换类型。

我一直在寻找,但不知道该怎么做,因为我不知道如何表达这个问题。

是否有另一种方法可以动态地从用户或我不知道的属性中获取输入。

【问题讨论】:

  • 您期望的其他输入类型是什么?
  • int, float, char...简单的初级喜欢。
  • 如何知道输入“5”是char还是int?
  • 类似当初始化一个类似于2.5的var时,它总是会选择double,而不是float或decimal。

标签: c# dynamic console


【解决方案1】:

没有。没有其他方法可以接受来自控制台的用户输入。它总是文本/字符串。

您必须将来自Console.ReadLine() 的输入从字符串解析为您需要的任何类型。您的问题是,如果您只有一个字符串,就无法知道类型是什么。如果用户输入“2”,她的意思是数字 2(int)还是她实际上的意思是“2”(字符串)。

【讨论】:

    【解决方案2】:

    您可以取得有限的成功,但由于 cmets 中指出的原因,它仅限于少数原始类型。例如,浮点输入无法区分 Float32 和 Float64

    for (int i = 0; i < 5; i++)
    {
        var input = Console.ReadLine();
    
        dynamic x;
        if (int.TryParse(input, out int a))
            x = a;
        else if (float.TryParse(input, out float b))
            x = b;
        else if (input.Length == 1)
            x = input[0];
        else
            x = input;
    
        Console.WriteLine($"{x}: {x.GetType()}");
    }
    

    5
    5:System.Int32
    6.9
    6.9:System.Single
    f
    f: System.Char
    stri
    stri: System.String

    【讨论】:

    • 只是想补充一下,我使用了dynamic x,因为你这样做了,但是object x 可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多