userInput名称在当前上下文中不存在。为什么?

时间:2011-06-14 20:33:21

标签: c# .net

我现在有这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1

static void Main(string[] args)
{
    Console.WriteLine("Which teams have played? right vs inbetween the two teams");
    Match m = Regex.Match("^(?<team1>\.+) vs (?<team2>\.+)$", userInput); 
    if (m.Success) 
    {     
        string team1 = m.Groups["team1"].Value;
        string team2 = m.Groups["team2"].Value; 
    } 

    Console.WriteLine("What is the score? ");    
    Match m = Regex.Match("^(?<score1>\.+)/(?<score2>\.+)$", userInput);
    if (m.Success) 
    {
        int score1 = m.Groups ["score1"].Value;
        int score2 = m.Groups ["score2"].Value;
    }

我在点上的错误说:

  

“无法识别的转义序列^(?<team1>\.+)

它也会在score1score2行上告诉我:

  

“找不到类型或命名空间名称Match(您是否缺少using指令或essembly引用?)”

  

“在当前语境中,”正则表达式“这个名称并不令人兴奋。”

我要做的是从一行读两个答案并将其作为两个答案阅读。

例如:BlueTeam vs RedTeam。

也想为得分做同样的事情。例如:1/1我知道斜线有点奇怪,但我只是出于纯粹的懒惰而想到别的东西。

稍后在路径上我想将其分配到xy表中。像这样:http://pastebin.com/ahgP04bU

3 个答案:

答案 0 :(得分:4)

通过将变量放在{ ... }中,您将使用这些变量创建单独的块范围。它们不存在于该范围之外。

不要那样做。

Regex类位于System.Text.RegularExpressions命名空间中;您需要使用using语句包含该命名空间。

答案 1 :(得分:2)

您还必须包含

using System.Text.RegularExpressions

为了在没有完全合格的情况下使用正则表达式。

编辑:还有很多可以改善您的代码。当您在if块中定义变量时,那些变量将在本地作用于if块,并在if块完成后立即进行垃圾收集。

另外,我没有看到代码中任何地方都定义了userInput。

答案 2 :(得分:0)

  • 您需要确定命名空间的范围,当前缺少大括号({ })。
  • 文件顶部需要using System.Text.RegularExpressions与其他人一起使用。
  • userInput不存在,您需要声明它:var userInput = string.Empty;
  • 如果字符串中包含特殊字符(例如\),则可以使用@@"\myString"