C # Ekvivalentní Java anonymní vnitřní třídy s init bloky

hlasů
2

V Javě, i chtěli použít konstrukty, jako jsou

List<String> list = new ArrayList<String>() {{add(foo);}};

Existuje způsob, jak to udělat v 1. linii v jazyce C #, taky?

Položena 11/02/2009 v 08:02
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
2

Můžete to udělat v .NET 3.5 nastavit hodnoty vlastností:

List<string> list = new List<string> () { Property = Value, Property2 = Value2 };

Nebo k inicializaci pole:

List<string> list = new List<string> () { "value1", "value2" };

Vy metod nelze volat tímto způsobem, nicméně.

Odpovězeno 11/02/2009 v 08:04
zdroj uživatelem

hlasů
6

Myslím, že to, co chcete, je pole Inicializátor

List<string> list = new List<string>() { "foo" };

Více položek by měly být odděleny čárkou

List<string> list = new List<string>() { "foo","bar","bas"};
Odpovězeno 11/02/2009 v 08:07
zdroj uživatelem

hlasů
8

To se nazývá kolekce inicializátor a je součástí C # 3.0.

Stejně jako seznamy, můžete inicializovat sbírky složitějších typů, tak dlouho, dokud implementovat IEnumerable a mají approprate Přidat metody pro každý prvek v kolekci inicializátor. Například, můžete použít Add(key, value)metodu Dictionary<TKey, TValue>takto:

var dict = new Dictionary<string, int> 
{ 
    {"first", 10 }, 
    {"second", 20 }
};

Další podrobnosti lze nalézt v kapitole 8 C # do hloubky, který lze stáhnout zdarma z webových stránek Manninga .

Odpovězeno 11/02/2009 v 08:19
zdroj uživatelem

hlasů
0

Pokud potřebujete jen vypořádat s přidáváním objektů do kolekce, pak sbírka inicializátory fungují skvěle, ale pokud budete potřebovat více statickou inicializaci které mají být provedeny, můžete použít něco, co nazývá statický konstruktor, který funguje stejně jako statické inicializátor v Javě

To má špatnou formátování, ale zdá se pokrýt

Odpovězeno 11/02/2009 v 08:20
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more