Suchen und Finden
Service
Infos und Kontakt
Inhalt
7
Einleitung
15
An wen sich dieses Buch richtet
16
Was Sie brauchen, um dieses Buch nutzen zu können
17
Plattform-Hinweise
17
Wie dieses Buch aufgebaut ist
17
Was weggelassen wurde
20
Zur deutschen Übersetzung
20
Die in diesem Buch verwendeten Konventionen
20
Die Codebeispiele zu diesem Buch
21
Die Codebeispiele verwenden
22
Danksagungen
22
Kapitel 1 Zahlen und Enumerationen
25
1.0 Einführung
25
1.1 Prüfen, ob ein Bruch und eine Fließkommazahl ungefähr gleich sind
27
1.2 Grad in Rad umwandeln
29
1.3 Rad in Grad umwandeln
29
1.4 Den Bit-Komplement-Operator mit verschiedenen Datentypen nutzen
30
1.5 Auf einen geraden oder einen ungeraden Wert prüfen
32
1.6 Das High-Word oder Low-Word zu einer Zahl ermitteln
33
1.7 Eine Zahl zu einer anderen Basis in eine Zahl zur Basis 10 konvertieren
35
1.8 Ermitteln, ob ein String eine gültige Zahl ist
36
1.9 Einen Fließkommawert runden
37
1.10 Einen Rundungsalgorithmus wählen
37
1.11 Celsius in Fahrenheit konvertieren
39
1.12 Fahrenheit in Celsius konvertieren
39
1.13 Einen verkleinernden numerischen Cast sicher durchführen
40
1.14 Einen Enumerationswert als einen String anzeigen
43
1.15 Klartext in einen äquivalenten Enumerationswert umwandeln
45
1.16 Prüfen, ob ein Wert ein gültiger Enumerations wert ist
46
1.17 Auf eine gültige Enumeration von Flags prüfen
49
1.18 Enumerierte Member in einer Bit-Maske verwenden
51
1.19 Ermitteln, ob ein oder mehr Enumerations-Flags gesetzt sind
54
1.20 Den ganzzahligen Anteil eines decimal- oder double-Werts ermitteln
57
Kapitel 2 Strings und Zeichen
59
2.0 Einführung
59
2.1 Die Art von Zeichen ermitteln, die ein char enthält
59
2.2 Beim Vergleich von zwei Zeichen die Berück sichtigung von Groß-/ Kleinschreibung steuern
63
2.3 Die Positionen aller Vorkommen eines Strings in einem anderen String finden
65
2.4 Groß-/Kleinschreibung beim Vergleich von Strings steuern
69
2.5 Einen String mit dem Anfang oder dem Ende eines anderen Strings vergleichen
70
2.6 Einen Text in einen String einfügen
72
2.7 Zeichen in einen String einfügen oder aus ihm entfernen
73
2.8 Binäre Daten in Base64 kodieren
76
2.9 In Base64 kodierte Binärinformationen dekodieren
77
2.10 Einen String, der als byte[ ] zurückgeliefert wird, wieder in einen String umwandeln
78
2.11 Einen String an eine Methode übergeben, die nur ein byte[ ] akzeptiert
79
2.12 Strings in andere Typen umwandeln
81
2.13 Einen begrenzten String erzeugen
85
2.14 Elemente aus einem begrenzten String herausziehen
86
2.15 Alle Zeichen in einem String durchlaufen
87
2.16 Zeichen vom Ende oder Anfang eines Strings abschneiden
88
2.17 Einen String darauf testen, ob er null oder leer ist
89
2.18 Eine Zeile anhängen
90
Kapitel 3 Klassen und Strukturen
92
3.0 Einführung
92
3.1 Union-artige Strukturen erstellen
94
3.2 Einen Typ sortierbar machen
97
3.3 Einen Typ suchbar machen
102
3.4 Die Operatoren +=, –=, /= und *= indirekt überladen
107
3.5 Die Operatoren &&, || und ?: indirekt überladen
110
3.6 Fehlerfreie Ausdrücke erstellen
113
3.7 Ihre Boolesche Logik minimieren (reduzieren)
116
3.8 Sprachunabhängig zwischen einfachen Typen konvertieren
119
3.9 Herausfinden, wann der Cast()-Operator, der as Operator oder der is Operator verwendet werden...
126
3.10 Mit dem as-Operator casten
127
3.11 Den Typ einer Variablen mit dem is-Operator ermitteln
130
3.12 Aus einer Methode mehrere Elemente zurückliefern
133
3.13 Kommandozeilenparameter parsen
135
3.14 Ein konstantes Feld zur Laufzeit initialisieren
144
3.15 Klonbare Klassen erstellen
147
3.16 Die Entsorgung eines Objekts sichern
150
3.17 Nicht-verwaltete Ressourcen entsorgen
153
3.18 Feststellen, wann Boxing und Unboxing durchgeführt wird
160
Kapitel 4 Generics
164
4.0 Einführung
164
4.1 Entscheiden, wann und wo Generics verwendet werden sollten
164
4.2 Generische Typen verstehen
165
4.3 ArrayList durch das generische Gegenstück ersetzen
173
4.4 Stack und Queue durch ihre generischen Gegenstücke ersetzen
177
4.5 Eine verkette Liste (LinkedList) implementieren
182
4.6 Einen Werttyp erstellen, der auf null initialisiert werden kann
186
4.7 Den Inhalt einer SortedList umkehren
188
4.8 Schreibgeschützte generische Collections erstellen
216
4.9 Eine Hashtable durch das generische Gegenstück ersetzen
218
4.10 foreach mit generischen Dictionary-Typen verwenden
222
4.11 Typargumente beschränken
223
4.12 Generische Variablen auf ihre Default-Werte initialisieren
225
Kapitel 5 Collections
228
5.0 Einführung
228
5.1 Zwei Elemente in einem Array tauschen
230
5.2 Ein Array schnell umkehren
232
5.3 Ermitteln, wie oft ein Element in einer List<T> vorkommt
234
5.4 Alle Instanzen eines bestimmten Elements aus einer List<T> abrufen
237
5.5 Elemente in ein Array einfügen und aus einem Array entfernen
241
5.6 Eine List<T> sortiert halten
243
5.7 Die Schlüssel und/oder Werte eines Dictionary sortieren
246
5.8 Ein Dictionary mit Ober- und Untergrenzen für Werte erzeugen
249
5.9 Momentaufnahmen von Lists in Arrays speichern
252
5.10 Eine Collection zwischen Anwendungssessions erhalten
253
5.11 Alle Elemente in einem Array oder einer List<T> testen
256
5.12 Eine Aktion auf jedem Element eines Arrays oder einer List<T> durchführen
257
5.13 Ein schreibgeschütztes Array- oder List<T>- Objekt erzeugen
259
Kapitel 6 Iteratoren und partielle Typen
262
6.0 Einführung
262
6.1 In einer Klasse eine eingebettete foreach- Funktionalität implementieren
263
6.2 Eigene Enumeratoren erstellen
269
6.3 Auf einem generischen Typ einen Iterator implementieren
272
6.4 Auf einem nicht-generischen Typ einen Iterator erzeugen
275
6.5 Einem einzelnen Typ mehrere Iteratoren hinzufügen
276
6.6 Einen Iterator zwingen, die Iteration zu beenden
280
6.7 Mit Finally-Blöcken und Iteratoren klarkommen
281
6.8 Interface-Implementierungen organisieren
285
6.9 Code generieren, der sich nicht mehr im Haupt Code-Pfad befindet
290
Kapitel 7 Exception-Handling
294
7.0 Einführung
294
7.1 Wann sollten Exceptionen abgefangen und weitergereicht werden?
302
7.2 Sichern, dass Exceptions nicht verloren gehen, wenn Finally-Blöcke verwendet werden
303
7.3 Exceptions von Methoden verarbeiten, die über Reflection aufgerufen wurden
306
7.4 Unbehandelte Exceptions verhindern
309
7.5 Exception-Informationen erhalten
311
7.6 Einem Problem schnell auf den Grund gehen
315
7.7 Einen neuen Exception-Typ erzeugen
316
7.8 Einen Stacktrace erhalten
329
7.9 Bei einem ersten Auftreten einer Exception abbrechen
332
7.10 Exceptions verarbeiten, die von einem asynchronen Delegate ausgelöst werden
335
7.11 Exceptions mithilfe von Exception.Data mit zusätzlichen Informationen ausstatten
336
7.12 Mit unbehandelten Exceptions in WinForms- Anwendungen umgehen
338
Kapitel 8 Diagnose
341
8.0 Einführung
341
8.1 Feinstufige Kontrolle über Debugging/Tracing- Ausgaben erhalten
342
8.2 Feststellen, ob ein Prozess nicht mehr reagiert
345
8.3 In einer Anwendung Event-Logs nutzen
347
8.4 Event-Log-Einträge durchsuchen
354
8.5 Das Event-Log auf einen bestimmten Eintrag überwachen
358
8.6 Einen einfachen Performance-Counter implementieren
359
8.7 Komplexen Tracing-Code aktivieren und deaktivieren
363
8.8 Die Standardausgabe eines Prozesses einfangen
367
8.9 Eigene Debugging-Anzeigen für Ihre Klasse erstellen
369
Kapitel 9 Delegates, Events und anonyme Methoden
372
9.0 Einführung
372
9.1 Steuern, wann ein Delegate in einem Multicast- Delegate ausgelöst wird
373
9.2 Die Rückgabewerte aller Delegates in einem Multicast-Delegate erhalten
377
9.3 Exceptions separat für alle Delegates in einem Multicast-Delegate verarbeiten
379
9.4 Synchrone Delegate-Aufrufe in asynchrone umwandeln
383
9.5 Ein fortgeschrittener Suchmechanismus für Interfaces
386
9.6 Veränderungen an und Hinzufügungen zu einer Hashtable beobachten
390
9.7 Anonyme Methoden verwenden
398
9.8 Event-Handler sauber einrichten
403
9.9 In anonymen Methoden unterschiedliche Parameter-Modifier verwenden
407
9.10 In C# Closures verwenden
411
9.11 Mit Funktionsobjekten mehrere Operationen auf einer Liste durchführen
415
Kapitel 10 Reguläre Ausdrücke
420
10.0 Einführung
420
10.1 Treffer enumerieren
421
10.2 Gruppen aus einer MatchCollection herausziehen
424
10.3 Die Syntax eines regulären Ausdrucks prüfen
428
10.4 Schnell nur den letzten Treffer in einem String finden
429
10.5 Die elementaren String-Ersetzungsfunktionen verstärken
430
10.6 Einen Tokenizer implementieren
433
10.7 Die Zeilen eines Texts zählen
435
10.8 Die gesamte Zeile zurückliefern, in der ein Treffer gefunden wird
438
10.9 Ein bestimmtes Vorkommen eines Treffers finden
442
10.10 Verbreitete Muster verwenden
444
Kapitel 11 Dateisystem-I/O
448
11.0 Einführung
448
11.1 Datei-Attribute manipulieren
449
11.2 Eine Datei umbenennen
452
11.3 Ein plattformunabhängiges Zeilenende-Zeichen ausgeben
453
11.4 Verzeichnisattribute manipulieren
455
11.5 Ein Verzeichnis umbenennen
458
11.6 Mit Jokerzeichen nach Dateien oder Verzeichnissen suchen
459
11.7 Einen Verzeichnisbaum erhalten
464
11.8 Einen Pfad parsen
466
11.9 Pfade in Umgebungsvariablen parsen
468
11.10 Konsolenwerkzeuge starten und verwenden
470
11.11 Warten, dass im Dateisystem ein Ereignis eintritt
471
11.12 Die Versionsinformationen von zwei ausführbaren Modulen vergleichen
474
11.13 Informationen zu allen Laufwerken auf einem System abfragen
477
11.14 Dateien komprimieren und dekomprimieren
480
Kapitel 12 Reflection
484
12.0 Einführung
484
12.1 Referenzierte Assemblies auflisten
485
12.2 Exportierte Typen auflisten
487
12.3 Überschriebene Methoden ermitteln
488
12.4 In einer Assembly Member finden
494
12.5 Die eingebetteten Typen in einer Assembly ermitteln und abrufen
495
12.6 Die Vererbungshierarchie für einen Typ anzeigen
497
12.7 Die Unterklassen eines Typs ermitteln
499
12.8 Alle serialisierbaren Typen in einer Assembly finden
501
12.9 Member dynamisch aufrufen
503
12.10 Prüfen, ob ein Typ oder eine Methode generisch ist
507
12.11 Informationen zu lokalen Variablen erhalten
508
12.12 Einen generischen Typ erzeugen
511
Kapitel 13 Web
513
13.0 Einführung
513
13.1 Eine IP-Adresse in einen Hostnamen umwandeln
513
13.2 Einen Hostnamen in eine IP-Adresse umwandeln
514
13.3 Einen URI parsen
515
13.4 Mit Webserver-Fehlern umgehen
519
13.5 Mit einem Webserver kommunizieren
521
13.6 Über einen Proxy gehen
523
13.7 Das HTML zu einer URL erhalten
525
13.8 Das neue WebBrowser-Steuerelement verwenden
526
13.9 Datenbank-Tabellen an den Cache binden
528
13.10 Eine ASP.NET-Website mittels Programmierung aufbauen
530
13.11 Daten für das Web maskieren
533
13.12 Die Klasse UriBuilder nutzen
535
13.13 Die Konfiguration Ihrer Webanwendung einsehen und ändern
538
13.14 Bei der Arbeit mit HTTP gecachte Ergebnisse verwenden
540
13.15 Die angepassten Fehlerseiten eines Webservers prüfen
542
Kapitel 14 XML
545
14.0 Einführung
545
14.1 XML-Daten in Dokumentordnung lesen oder schreiben
546
14.2 Den Inhalt eines XML-Dokuments durchsuchen
550
14.3 XML validieren
552
14.4 Ein XML-Dokument über ein Programm aufbauen
558
14.5 Änderungen an einem XML-Dokument feststellen
560
14.6 Ungültige Zeichen in einem XML-String behandeln
563
14.7 XML transformieren
566
14.8 Modifizierte XML-Dokumente validieren, ohne sie neu zu laden
570
14.9 XSLT-Transformationen erweitern
573
14.10 Schemas aus vorhandenen XML-Dateien ableiten
577
14.11 XSLT-Transformationen Parameter übergeben
578
Kapitel 15 Netzwerk
583
15.0 Einführung
583
15.1 Formulareingaben simulieren
583
15.2 Daten von einem Server herunterladen
587
15.3 Aus einem Programm heraus pingen
589
15.4 Über den SMPT-Dienst SMTP-Mails senden
591
15.5 Sockets nutzen, um die Ports auf einer Maschine zu scannen
596
15.6 Die aktuellen Internet-Verbindungseinstellungen nutzen
601
15.7 Über FTP eine Datei herunterladen
608
Kapitel 16 Sicherheit
610
16.0 Einführung
610
16.1 Den Zugriff auf Typen in einer lokalen Assembly steuern
610
16.2 Einen String verschlüsseln und entschlüsseln
620
16.3 Eine Datei verschlüsseln und entschlüsseln
625
16.4 Kryptographische Informationen aufräumen
630
16.5 Prüfen, dass ein String bei einer Übertragung nicht beschädigt wurde
632
16.6 Daten sicher speichern
636
16.7 Eine Sicherheitszusicherung absichern
643
16.8 Prüfen, dass einer Assembly bestimmte Berechtigungen verliehen wurden
646
16.9 Die Angriffsfläche einer Assembly minimieren
647
16.10 Sicherheits/Audit-Informationen erhalten
648
16.11 Zugriff auf eine Datei oder einen Registrierungs schlüssel gestatten bzw. widerrufen
654
16.12 Stringdaten mit sicheren Strings absichern
657
16.13 web.config-Informationen verschlüsseln
660
16.14 Den vollständigen Grund dafür erhalten, dass eine SecurityException ausgelöst wurde
662
16.15 Sichere Unicode-Kodierung erreichen
664
16.16 Ein sichereres Datei-Handle erhalten
666
Kapitel 17 Threading und Synchronisierung
668
17.0 Einführung
668
17.1 Thread-gebundene statische Felder erzeugen
668
17.2 Thread-sicheren Zugriff auf Klassen-Member bieten
671
17.3 Stillschweigende Thread-Beendigung verhindern
677
17.4 Thread-spezifische Daten privat speichern
680
17.5 Über Semaphore Mehrfachzugriff auf Ressourcen bieten
683
17.6 Mehrere Prozesse mit einem Mutex synchronisieren
688
17.7 Events für die Thread-Kooperation einsetzen
700
17.8 Benannte Events einsetzen
702
17.9 Atomare Operationen zwischen Threads durchführen
706
Kapitel 18 Werkzeugkasten
709
18.0 Einführung
709
18.1 Mit dem Herunterfahren des Betriebssystems, dem Power Management oder Änderungen der Benutze...
709
18.2 Einen Dienst steuern
714
18.3 Die Prozesse auflisten, in denen eine Assembly geladen ist
718
18.4 Message-Queues auf der lokalen Arbeitsstation verwenden
719
18.5 Den Pfad zur aktuellen Version des Frameworks finden
723
18.6 Die Versionen einer Assembly ermitteln, die im Global Assembly Cache (GAC) registriert sind
723
18.7 Die Standardausgabe einfangen
726
18.8 Code in seiner eigenen AppDomain ausführen
728
18.9 Die Betriebssystem- und Service-Pack-Version des aktuellen Betriebssystems ermitteln
730
Index
733
Über die Autoren
765
Über den Übersetzer
765
Kolophon
765
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.; Ersparnis im Vergleich zur Printversion























