Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 为什么我能';t使用;这一点;在这里_C# 4.0_Dictionary - Fatal编程技术网

C# 4.0 为什么我能';t使用;这一点;在这里

C# 4.0 为什么我能';t使用;这一点;在这里,c#-4.0,dictionary,C# 4.0,Dictionary,我不明白为什么这段代码是错误的,我只想在字典中封装空格 private delegate void LotIs(string path); private Dictionary<int, LotIs> lots = new Dictionary<int, LotIs> { {0, this.LotIsBanHummer}, {1, this.LotIsDuck}, {2, this.LotIsToy

我不明白为什么这段代码是错误的,我只想在字典中封装空格

    private delegate void LotIs(string path);

    private Dictionary<int, LotIs> lots = new Dictionary<int, LotIs>
    {
        {0, this.LotIsBanHummer},
        {1, this.LotIsDuck},
        {2, this.LotIsToy},
        {3, this.LotIsDragon},
        {4, this.LotIsMoney}
    };

    private void LotIsBanHummer(string path) 
    {
        lotImage.Image = LB10_VAR7.Properties.Resources.banhammer2;
        StreamReader str = new StreamReader(path + "BunHummer.txt");
        textBox1.Text = str.ReadToEnd();
        textBox3.AppendText(textBox1.Lines[1].Split(' ')[1]);
    }
private-delegate-void-LotIs(字符串路径);
私人词典批量=新词典
{
{0,这是LotIsBanHummer},
{1,这个。洛蒂斯杜克},
{2,这是洛蒂斯泰},
{3,这是洛蒂斯德拉贡},
{4,这是洛蒂斯莫尼}
};
私有void LotIsBanHummer(字符串路径)
{
lotImage.Image=LB10_VAR7.Properties.Resources.banhammer2;
StreamReader str=新的StreamReader(路径+“bunhumer.txt”);
textBox1.Text=str.ReadToEnd();
textBox3.AppendText(textBox1.Lines[1]。拆分(“”)[1]);
}

在构造函数中使用
这个
来定义
字典

像这样:

private Dictionary<int, LotIs> lots = new Dictionary<int, LotIs>();

public YourClass() {
   lots[0] = this.LotIsBanHummer;
   lots[1] = this.LotIsDuck;
   lots[2] = this.LotIsToy;
   lots[3] = this.LotIsDragon;
   lots[4] = this.LotIsMoney;
}
private Dictionary lots=new Dictionary();
公共课{
lots[0]=这个LotIsBanHummer;
第[1]批=本。洛蒂斯杜克;
第[2]批=这个。洛蒂斯泰;
第[3]批=这个;
lots[4]=这个LotIsMoney;
}

如果定义了
LotIsBanHummer
LotIsDuck
static
,那么您可以在没有
this
的情况下进行初始化在构造函数中使用
this
来定义
字典

像这样:

private Dictionary<int, LotIs> lots = new Dictionary<int, LotIs>();

public YourClass() {
   lots[0] = this.LotIsBanHummer;
   lots[1] = this.LotIsDuck;
   lots[2] = this.LotIsToy;
   lots[3] = this.LotIsDragon;
   lots[4] = this.LotIsMoney;
}
private Dictionary lots=new Dictionary();
公共课{
lots[0]=这个LotIsBanHummer;
第[1]批=本。洛蒂斯杜克;
第[2]批=这个。洛蒂斯泰;
第[3]批=这个;
lots[4]=这个LotIsMoney;
}

如果定义了
LotIsBanHummer
LotIsDuck
static
,则可以在不使用
this
的情况下进行初始化,编译器不允许在此类初始化表达式中使用
this
,因为在计算表达式时假定
this
未初始化。请记住,这些表达式是在执行任何构造函数之前计算的

在构造函数中,允许在任何时候使用此函数,即使某些字段可能尚未初始化,但您有责任不访问任何未初始化的成员


因此,在您的情况下,解决方案是初始化字典/在构造函数中添加初始内容(或者,在多个构造函数的情况下,在每个构造函数调用的方法中).

编译器不允许您在这样的初始值设定项表达式中使用
this
,因为计算表达式时假定
this
未初始化。请记住,这些表达式是在执行任何构造函数之前计算的

在构造函数中,允许在任何时候使用此函数,即使某些字段可能尚未初始化,但您有责任不访问任何未初始化的成员

因此,在您的情况下,解决方案是初始化字典/在构造函数中添加初始内容(或者,在多个构造函数的情况下,在每个构造函数调用的方法中添加初始内容)。

来自C#规范:

17.4.5.2 实例字段初始化

实例字段的变量初始值设定项不能引用 正在创建的实例。因此,引用是编译时错误
这是变量初始值设定项中的
,因为它是 变量初始值设定项,通过 简单名称

但是,您可以将初始化器移动到构造函数

来自C#规范:

17.4.5.2 实例字段初始化

实例字段的变量初始值设定项不能引用 正在创建的实例。因此,引用是编译时错误
这是变量初始值设定项中的
,因为它是 变量初始值设定项,通过 简单名称


但是,您可以将初始化器移动到构造函数

为了澄清你的文本,请注意,没有“空白”这样的东西。您所指的可以称为函数、方法或例程,但当您指的是没有返回值的方法时,提到“无效”是不正确的,正如返回
int
值的方法不是“一个int”。为了澄清您的文本,请注意,没有“无效”这样的东西。您所指的可以称为函数、方法或例程,但在指没有返回值的方法时说“无效”是不正确的,正如返回
int
值的方法不是“int”。