Ką manote apie? = Operatorius C #?

Ar manote, kad C # palaikys kažką panašaus: = operatoriaus?

Vietoj to:

 if (list == null) list = new List<int>(); 

Galite rašyti:

 list ??= new List<int>(); 

Dabar galėčiau naudoti (bet man atrodo, kad jis nėra skaitomas):

 list = list ?? new List<int>(); 
10
nustatyti TN. 2010-03-30 18:18 Kovo 30 d. 10 val. 18:18 2010-03-30 18:18
@ 5 atsakymai

Aš visada norėjau kažką panašaus. Norėčiau jį naudoti daug dažniau nei ?? savaime.

Tačiau tai, ko aš tikrai noriu, yra operatoriaus forma, kuri leidžia tik atkurti objektą, jei jis nėra nulis. Norėdami pakeisti:

  int count = (list != null)? list.Count : 0 

kažką panašaus į:

  int count = list??.Count : 0 

Kas būtų ypač naudinga man ilgų grandinių grandinėmis (blogas dizainas, aš žinau), bet, pavyzdžiui,

  int count = foo??.bar??.baz??.list??.Count : 0 

Šiuo metu neįmanoma ?? , nes galite tik pasakyti „priskirti foo ar alternatyvą, jei nulinis“, bet ne „priskirti turtą foo ar alternatyvą, jei null“.

4
30 марта '10 в 18:29 2010-03-30 18:29 Atsakymą įteikė Tesserex kovo 30 d. 10 val. 18:29 2010-03-30 18:29

Asmeniškai manau, kad tik antrasis pratęsimas yra prasmingas (taupymo ta pačioje eilutėje kaip += ir tt) požiūriu:

 list = list ?? new List<int>(); 

bet nuoširdžiai, manau, kad tai šiek tiek nereikalinga. Paprastai žmonės „gauna“ i += 5; , bet linkę turėti nulinio koalescencijos ( ?? ) problemą. Pridėkite priskyrimo operatorių į nulinį koalansavimą ir ... gerai, nematau, kad jis būtų baigtas.

Asmeniškai aš norėčiau, kad originalus kodas:

 if(list == null) { list = new List<int>(); } .... 

Taip pat - apsvarstykite: visose kitose += , -= ir tt Dešinė pusė visada vertinama. Šiuo atveju jis nebus (kai kuriais atvejais). Tai dar labiau painiojama. Tai reiškia:

 i += SomethingCriticalThatMustBeCalled(); // fine - always runs j ??= SomethingElseCriticalThatMustBeCalled(); // is this run? if j != null? 
16
30 марта '10 в 18:28 2010-03-30 18:28 atsakė Marc Gravellui kovo 30 d. 10 val. 18:28 2010-03-30 18:28

Trikis, kurį rado kažkur čia čia stackoverflow'e, buvo kažkas panašaus ...

 private List<string> myList; public List<string> MyProp { get { return myList ?? (myList= new List<string>()); } } 

... galbūt savo kode galite naudoti panašų tingus.

4
30 марта '10 в 19:35 2010-03-30 19:35 atsakymą pateikė Matthew Whited kovo 30 d. 10 val. 19:35 2010-03-30 19:35

Man patinka - tai gražus, glaustas būdas išreikšti tingią išraišką. Nepriklausomai nuo to, ar ji yra įtraukta į kalbą, yra visiškai kitokia - kaip Eric Lippert mėgsta atkreipti dėmesį , naujoms funkcijoms įgyvendinti reikia daug pastangų, todėl jie turi padaryti reikšmingą teigiamą rezultatą kalboje, kurią reikia įtraukti.

3
30 марта '10 в 18:24 2010-03-30 18:24 atsakymą pateikė Andrew Hare kovo 30 d. 10 val. 18:24 2010-03-30 18:24

Jei neteisingai neskaitysiu jūsų klausimo, šis teiginys yra C #: http://msdn.microsoft.com/en-us/library/ms173224 ( VS.80) .aspx

1
30 марта '10 в 19:39 2010-03-30 19:39 Tundey atsakymas kovo 30 d. 10 val. 19.39 2010-03-30 19:39