jak uniknout složené závorky (složené závorky) ve formátu řetězce v .net
<p>jak lze v závorce uniknout pomocí <code>string.format</code>. například:</p><pre><code>string val = "1,2,3" string.format(" foo {{0}}", val); </code></pre><p>tento příklad nevyvolává výjimku, ale vydává řetězec <code>foo {0}</code></p><p>existuje způsob, jak uniknout závorkám?</p>
<p>pro výstup <code>foo {1, 2, 3}</code> musíte udělat něco jako:</p><pre><code>string t = "1, 2, 3"; string v = string.format(" foo {{{0}}}", t); </code></pre><p>pro výstup <code>{</code> použijte <code>{{</code> a pro výstup <code>}</code> použijte <code>}}</code>.</p>
Pokud v řádcích bude :  
1. A  
2. B  
3. C  
4. D  
Tak tady bude třeba :  
=SUMA(KDYŽ(NEBO(C3="A";C3="B");5;2);KDYŽ(NEBO(C4="A";C4="B");5;2);KDYŽ(NEBO(C5="A";C5="B");5;2);KDYŽ(NEBO(C6="A";C6="B");5;2))  
Bože to je ale zvěrstvo. Pozor na délku vzorce v buňce ! Asi by se muselo trochu víc přemýšlet. Nepochopil jsem z toho, na co se ptáš :D Jaký kód? STOP -> Záznam se stopne, nevidím problém.. Lepší vyjadřování by to chtělo :p Zpět s .Net 1.1 zmatek byl nezbytný: rozklad kód byl jednoduchý, a ty by mohly jít ze sestavy, IL, do kódu C # a mít ji znovu sestaven s velmi malým úsilím.


Nyní s .Net 3.5 Nejsem si vůbec jistý. Zkuste dekompilace 3,5 sestavu; co dostanete, je dlouhá cesta z kompilace.


Přidejte optimalizací od 3,5 (mnohem lepší než 1.1) a způsob, jakým anonymní typy, delegátů a tak dále jsou zpracovány pomocí odrazu (jsou to noční můra překompilovat). Přidejte lambda výrazy, kompilátor ‚magic‘ jako Linq-syntaxe a `var`a C # 2 funkce, jako je `yield`(což má za následek nové třídy s nečitelné názvy). Váš rozložit kód končí dlouhá cesta od kompilovatelný.


Profesionální tým se spoustou času může ještě zvrátit zpět inženýr, ale pak totéž platí o jakémkoliv pozměněném kódu. Jaký kód se dostali ven, že by neudržitelný a vysoce pravděpodobné, že bude velmi buggy.


Doporučuji key-podepisování sestavení (to znamená, pokud hackeři mohou překompilovat jednu budou muset překompilovat všechny), ale nemyslím si, že mlžení to stojí za to. Musíte skutečně vložit „falešný“ řádek pomocí `-insertRowsAtIndexPaths:withRowAnimation:`. Z UITableView úhlu pohledu, nejsou tam žádné „skutečné“ řádky nebo „falešné“ řádky. Existuje cokoliv řádky zdroj dat říká, že jsou. Takže jste měli 1 řádek, a pak jste odstranili 1 řádek, a pak UITableView vás zeptal „kolik řádků jsou tam“ a uvedl 1 a UITableView řekl: „1 -?. 1 = 1. Počkejte, co Blam“


Chcete-li vložit řádek ( „skutečný“ nebo „falešný“ všechno je stejný), je třeba říci UITableView jste to vy vkládání. <p>použít <a href="http://msdn.microsoft.com/en-us/library/system.io.stringwriter.aspx"><code>stringwriter</code></a> namísto souboru <a href="http://msdn.microsoft.com/en-us/library/system.io.streamwriter.aspx"><code>streamwriter</code></a> :</p><pre><code>public static string serializeobject&lt;t&gt;(this t toserialize) { xmlserializer xmlserializer = new xmlserializer(toserialize.gettype()); using(stringwriter textwriter = new stringwriter()) { xmlserializer.serialize(textwriter, toserialize); return textwriter.tostring(); } } </code></pre><p>poznámka: je důležité použít <code>toserialize.gettype()</code> namísto <code>typeof(t)</code> v konstruktoru xmlserializer: pokud použijete první, kód pokrývá všechny možné podtřídy <code>t</code> (které jsou pro metodu platné), zatímco druhý z nich selže při předávání typu odvozeného z <code>t</code>. zde je odkaz s nějakým příkladem kódu, který motivuje toto prohlášení, s <code>xmlserializer</code> házením <code>exception</code>, když je <code>typeof(t)</code> použito, protože předáte instanci odvozeného typu metodě, která volá serializeobject, který je definované v základní třídě odvozeného typu: <a href="http://ideone.com/1z5j1">http://ideone.com/1z5j1</a> .</p><p>ideone také používá mono ke spuštění kódu; skutečný <code>exception</code> byste dostali pomocí runtime microsoft .net má jiný <code>message</code> než ten, který je zobrazen na ideone, ale to selže stejně.</p> To není chyba.Třeba kroužek napíšete "Pravý CTRL + 5"... když zmáčknete tu 5 dvakrát, napíše to kroužek ... zkuste to jednou a pak dejte klávesu U .. máte Ů. Čeká to totiž na další písmenko. Jak se to dá vypnout jsem popravdě nikdy nehledal ![](/Client.Images/smileys/3.gif) To se prostě stává, zejména, děláte-li Duolingo v mobilní aplikaci. Už bylo probíráno mnohokrát. Je třeba mít v obchodu zakoupené zmrazení řady (za lingoty), když jej spotřebujete, zakoupit znovu. Osobně doporučuji web ve Chrome, tam se to opravdu stane zřídka. Ale hlavně, řada není tak klíčová, zejména, když se dokážete učit každý den i bez ní. Často toto je provedeno pomocí [„Data Driven odběry“](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , ale tato funkce je k dispozici pouze v některých SQL vydáních: Enterprise a Business Intelligence, ale ne v normě.


Takže existuje celá řada kreativních řešení. Ale nemám rád žádné z nich, a všechny vyžadují spravedlivý trochu práce mimo SSRS.


Mezi řešení, které jsem viděl, patří: Vytvoření odběr a potom zakázání nebo povolení SQL úlohu, kterou odešle předplatné (identifikovatelné podle GUID).


Vytvořte si .NET obálky exe zvládnout odeslání e-mailu. Je možné spustit dotaz nejprve zjistit, kolik se vrací řádky, a pak v případě potřeby generovat zprávu a zahrnout do e-mailu. [`IGNORE_SPACE`](http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_ignore_space)Režim umožňuje mezery mezi názvy funkcí a následující závorkách. Pokud je to povoleno, všechny názvy funkcí se stal vyhrazená slova, protože to stane se nemožné pro MySQL, zda voláte funkce nebo deklarovat (s použitím) identifikátor.


Proto, pokud je to povoleno, vaše `CREATE TABLE`selže a následující:



```
SELECT MD5 (some_column) FROM some_table

```

bude pracovat. Pokud `IGNORE_SPACE`je vypnuta, opak stane ( `CREATE TABLE`bude fungovat a především `SELECT`nebude, protože tam je mezera mezi názvu funkce a závorce). Nejlepší vysvětlení jsem viděl, je v kapitole 7 volných [Základy programování e-knihy](http://codebetter.com/karlseguin/2008/06/25/foundations-of-programming-ebook/) .


Zjednodušeně řečeno, v **.NET** dochází k nevracení paměti při odkazované objekty kořeny, a proto nemůže být uvolněna. K tomu dochází náhodně, když se držet na referencí mimo zamýšlený rozsah.


Budete vědět, že máte úniky, když začnete dostat OutOfMemoryExceptions nebo vaše využití paměti stoupá rámec toho, co byste očekávali ( **PerfMon** má pěkné čítače paměti).


Pochopení **.NET** model paměti je, je nejlepší způsob, jak se vyhnout to. Konkrétně pochopení toho, jak garbage collector funguje a jak reference práce - opět odkazuji na kapitolu 7 e-knihy. Také mějte na paměti společných úskalí, pravděpodobně nejvíce obyčejné jsoucí události. Pokud objekt je registrována k události na objekt **B** , pak objekt **A** bude držet kolem, dokud objekt **B** zmizí, protože **B** uchovává odkaz . Řešením je zrušení registrace na akce, když budete hotovi.


Samozřejmě, dobrý profil paměť vám umožní vidět vaše objektů grafy a prozkoumat hnízdění / odkazování svých objektů, které mají zjistit, kde reference přicházejí a co kořenový objekt je zodpovědný ( [red-gate mravenci profil](http://www.red-gate.com/products/ants_memory_profiler/index.htm) , JetBrains dotMemory, [memprofiler](http://memprofiler.com/) jsou opravdu dobré volby, nebo můžete použít pouze text **WinDbg** a **SOS** , ale já bych důrazně doporučujeme obchodní / vizuální produkt, pokud jste opravdový guru).


Věřím, že neřízený kód je předmětem jeho typické úniky paměti, že kromě sdílené odkazy jsou řízeny garbage collector. Možná se mýlím o tomto posledním bodě.