C# 命令行变量/字符串

C# 命令行变量/字符串,c#,C#,我的代码看起来像这样,但我把它缩短了一点 public static void mainvoid() { string line = Console.ReadLine().ToLower(); if (line == "restart") { Console.Clear(); Main(); } if (line == "enter a value: ") {

我的代码看起来像这样,但我把它缩短了一点

public static void mainvoid()
{
    string line = Console.ReadLine().ToLower();
    if (line == "restart")
    {
        Console.Clear();
        Main();
    }
    if (line == "enter a value: ")
    {
        string value = console.ReadLine();
        console.writeline("Your value is {0}", value);
        mainvoid();
    }
    if (line == "my name")
    {
        Console.WriteLine("Your name is {0}",     ConsoleApplication1.Properties.Settings.Default.name);
        mainvoid();
    }
我希望我的程序拾取一个命令(我已经这样做了),其中一些命令后面有值/字符串,例如。 顺便说一下,我用的是c#2010 我希望我的命令看起来像这样

我叫丹尼尔
因此字符串/值=Daniel 或
name=比利 所以字符串/值=比利

所以我希望它通过console.readline()获取它;然后选择它正在更改名称,然后是它将更改为的名称

但我不知道如何使最后一位成为我也可以使用的值/字符串


如果您能帮助我,请留下评论:)

如果您不想通过
Console.ReadLine()拾取命令,请使用
Console.ReadKey(true)
拾取命令。你的文字不会改变

下面是一个例子:

ConsoleKeyInfo ck = Console.ReadKey(true);
if(ck.Key == Keys.Space){
//do something
}
我不太理解你,但我会试着猜:)

如果要检索名称,可以这样写:

Console.Write("Your name is ");
string name = Console.ReadLine();

您可能需要想出自己的语法

例如,我选择了如下语法

<Command Name>:Parameters    
ChangeName:Daniel
//现在,我们可以解析该命令并执行所需的操作

//Split the string
String[] inputs= Console.ReadLine().Split(":");//"ChangeName:Bob"

//Generate the enumeration type from the input command
var cmd = (Command) Enum.Parse(typeof(Command), inputs[0] , false);

if(cmd == Command.ChangeName)
{
//Process the parameters in inputs[1]
}

我可以看到这里有两个问题,一个是从“my name is xyz”命令中提取人名,另一个是保存该值以供以后在程序中使用

由于您构建
main方法的方式,以及它调用自身(这称为递归)的事实,它不能在一个调用到下一个调用之间共享任何变量。这使得无法存储人员姓名。您可以通过在
main方法中创建循环来消除递归

static public void Main()
{
    string currentLine;

    do
    {
        currentLine = Console.ReadLine();
    }
    while (!currentLine.Equals("exit"))
}
这将持续允许用户输入命令,当用户输入“退出”时,程序将终止

现在,关于存储用户名的问题,您只需删除句子中的“my name is”部分即可获得用户名

static public void Main()
{
    string username = "Matthew";

    string currentLine;

    do
    {
        currentLine = Console.ReadLine();

        if (currentLine.Equals("restart"))
        {
            Console.Clear();
        }

        if (currentLine.StartsWith("my name is"))
        {
            username = currentLine.Replace("my name is ", "");
        }

        if (currentLine.Equals("my name"))
        {
            Console.WriteLine("Your name is {0}", username);
        }
    }
    while (!currentLine.Equals("exit"))
}

我希望这能让你动起来

我不希望命令在它之后产生一个值,例如:BobJesseJames,我知道那段代码,但我不想这样做。。。我不会把它和代码放在同一行,例如MYNAME=james,james将是字符串…wont与want不同。请做对。@nawfal StackOverflow是一个开放的平台,就像wiki一样,您可以轻松地编辑某人的问题以修复拼写错误,而不是留下无用的评论。请看@MattDavey任何人都可以轻松地修复它(我就是这么做的),但这并不意味着不应该指导一个人正确地获得一些基本的东西。不要再犯这个错误对他自己来说是最重要的。当我纠正了拼写错误后,OP再次编辑了这个问题,错误与我所有的“想要”都是“不会”的。我不得不重新编辑。在这种情况下,永远教他是多么容易和恰当啊!你觉得这有点太复杂了吗?是的。。我可以看出这是一个很好的可扩展解决方案,我自己可能也会做类似的事情,但OP对C#来说显然是新的,所以我只是想知道这对他来说是否有点过头了。感谢allot Matt,它在一个新的测试项目中工作得很好,我现在会尝试将它放到我的主项目中:D
static public void Main()
{
    string username = "Matthew";

    string currentLine;

    do
    {
        currentLine = Console.ReadLine();

        if (currentLine.Equals("restart"))
        {
            Console.Clear();
        }

        if (currentLine.StartsWith("my name is"))
        {
            username = currentLine.Replace("my name is ", "");
        }

        if (currentLine.Equals("my name"))
        {
            Console.WriteLine("Your name is {0}", username);
        }
    }
    while (!currentLine.Equals("exit"))
}