代表无法工作

时间:2016-03-29 10:30:00

标签: c# delegates

我遇到了一个程序的变化,我目前的infastructure无法处理并且变得太长:我不得不停止使用这样的绝对代码并转向面向对象。

重复问题:

List<string[]> logos = new List<string[]>();
string[] tempLogo = new string[2];
tempLogo[0] = "FRONT EMB";
tempLogo[1] = front_emb;
logos.Add(tempLogo);
tempLogo[0] = "back EMB";
tempLogo[1] = back_emb;
logos.Add(tempLogo);

变成了:

delegate string addLogo(string x); // Namespace area

public static void IntergrateLogo(string toAdd, string name) // Inside Class
{
    string[] tempLogo = new string[2];
    tempLogo[0] = name;
    tempLogo[1] = toAdd;
    logos.Add(tempLogo);
}

// Main method
addLogo adl = new addLogo(IntegrateLogo);
List<string[]> logos = new List<string[]>();
adl(front_emb,"FRONT EMB");
adl(back_emb,"BACK EMB");

问题:

  

1。 当前上下文中不存在“徽标”名称

     

2。 “IntergrateLogo”没有重载与委托'addLogo'匹配

     

3. 嵌入式声明不能是声明或带标签的声明

问题:

从我,非常低的代表知识,他们应该'模仿'主要的方法环境;因此,我的列表 - logos应该能够在IntergrateLogo方法中被查看和使用。

好吧,当我无法正常工作时,这种理解就消失了。

我不是在这里要求修复,我只是希望与代表更好地理解,因为在我搜索的任何地方,它都说它允许在方法中访问上下文环境范围但显然在这里不起作用。

是否可以通过使用委托在logos方法中看到IntergrateLogo

1 个答案:

答案 0 :(得分:3)

  

是否可以通过使用委托在IntergrateLogo方法中看到徽标?

当它是一个局部变量时,不是。

但是为什么你根本不使用代表这一点并不是很清楚。我甚至不会使用某种方法,而是写下:

List<string[]> logos = new List<string[]>
{
    // TODO: Rename front_emb and back_emb to follow .NET naming conventions
    new[] { front_emb, "FRONT EMB" },
    new[] { back_emb, "BACK EMB" },
};

我还考虑创建一个Logo类,而不是使用字符串数组,此时您将拥有:

List<Logo> logos = new List<Logo>
{
    new Logo(front_emb, "FRONT EMB"),
    new Logo(back_emb, "BACK EMB"),
}

看起来相当更整洁,IMO。