C# - 字符串问题中的字符串?

use*_*ser 2 c# string field initializer

我不确定这里究竟是什么问题.我正在使用2个字符串并且我一直在收到错误"字段初始化程序无法引用非静态字段,方法或属性'Captcha.Capture.CaptureTime'".

这是代码中的一个片段:

string CaptureTime = DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + "-" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();


string SaveFormat = Properties.Settings.Default.SaveFolder + "Screenshot (" + CaptureTime + ")." + Properties.Settings.Default.ImageFormat;
Run Code Online (Sandbox Code Playgroud)

我不会详细说明为什么我以这种特殊方式使用字符串.一切正常.我猜它与另一个字符串中的字符串有关?这可能是完全明显的,但我真的不知道.有任何想法吗?

Jon*_*eet 7

不,它与此无关 - 只是实例字段初始值设定项不能使用其他实例字段或实例方法.这是一个简单的例子:

class Test 
{
    int x = 0;
    int y = x + 1;
}
Run Code Online (Sandbox Code Playgroud)

将初始化移动到构造函数体中可能最简单.顺便说一句,你不应该DateTime.Now在一个初始化程序中多次访问- 它可能会在不同的调用之间发生变化,从而导致可怕的结果.使用局部变量 - 从构造函数再次更容易完成:

string CaptureTime;
string SaveFormat;

public YourType()
{
    DateTime now = DateTime.Now;

    CaptureTime = now.Month + "-" + now.Day + "-" + now.Year + "-" + 
        now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString();
    SaveFormat = Properties.Settings.Default.SaveFolder + 
        "Screenshot (" + CaptureTime + ")." + 
        Properties.Settings.Default.ImageFormat;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下,生成CaptureTime的一种更简单的方法是:

CaptureTime = now.ToString("MM-dd-yyyy-HHmmss");
Run Code Online (Sandbox Code Playgroud)