主方法仅在空的时候编译

时间:2017-01-12 14:22:44

标签: c# console-application

我创建了以下程序:

namespace MyNamespace
{
    public enum MyEnum { Jan = 1, Feb = 2, Mar = 3, Apr = 4, May = 5, Jun = 6, Jul = 7, Aug = 8, Sep = 9, Okt = 10, Nov = 11, Dec = 12 }

    class Program
    {
        static void Main(string[] args)
        {
            private static string sourcePath = @"T:\his\is\my\source";
            private static string destinationPath = @"T:\his\is\my\destination";
        }
    }
}

到目前为止我所拥有的一切。问题是它不会像这样编译。我得到以下异常:

  

}预期

仅当我将Main方法体留空时才有效。当我使用 Ctrl + K D 格式化代码时,它的格式如下:

namespace MyNamespace
{
    public enum MyEnum { SomeField = 1, SomeOtherField = 2, ... }

    class Program
    {
        static void Main(string[] args)
        {
            private static string sourcePath = @"T:\his\is\my\source";
        private static string destinationPath = @"T:\his\is\my\destination";
    }
}
}

这完全没有任何意义。我甚至无法访问参数args

  

名称' args'在当前上下文中不存在

我真的不知道为什么我的项目表现得像这样。有没有其他人遇到同样的问题?我该怎么办?

2 个答案:

答案 0 :(得分:10)

您无法在方法中声明类字段 将以下行移出:

private static string sourcePath = @"T:\his\is\my\source";
private static string destinationPath = @"T:\his\is\my\destination";

或者,如果您希望这些变量对于方法是本地的,请将它们声明为:

string sourcePath = @"T:\his\is\my\source";
string destinationPath = @"T:\his\is\my\destination";

答案 1 :(得分:2)

假设您已直接复制代码,则有三个主要错误。首先在你的枚举中你最后有一些省略号:

public enum MyEnum { SomeField = 1, SomeOtherField = 2, ... }

您需要删除它们,并在必要时添加更多值。

其次,您试图在Main方法中声明类似字段的内容。您需要将它们移出方法:

private static string sourcePath = "T:\his\is\my\source";
private static string destinationPath = "T:\his\is\my\destination";

static void Main(string[] args)
{

}

或者通过删除访问级别修饰符和静态修饰符来使它们成为方法级别变量:

static void Main(string[] args)
{
    string sourcePath = "T:\his\is\my\source";
    string destinationPath = "T:\his\is\my\destination";
}

最后你的路径是这样构建的:

"T:\his\is\my\source"

这里有反斜杠,C#字符串用于创建转义序列。你需要用另一个反斜杠来逃避它们:

"T:\\his\\is\\my\\source"

或者对它们使用@修饰符,以便逐字处理see this question for more information.

@"T:\his\is\my\source"

旁注:最好将路径作为命令行参数传递,或者使用配置文件,而不是将它们硬编码到代码中。例如(未经测试的代码):

static void Main(string[] args)
{
    if (args.Length < 2)
    {
        throw new ArgumentOutOfRangeException("Two arguments must be supplied!");
    }

    //Add error checking as appropriate
    //You could also format the arguments like -s:... and -d:...
    //Then the order of the arguments will not matter

    string sourcePath = args[0];
    string destinationPath = args[1];
}