optimale möglichkeit, bedingte nulloperatoren in booleschen ausdrücken zu verwenden
<p>sie schreiben einen booleschen ausdruck, der folgendermaßen aussehen könnte:</p><p><code>team.category == "a team" &amp;&amp; team?.manager?.isvietnamvet</code></p><pre><code>public class manager { public bool isvietnamvet { get; set; } } public class team { public string category { get; set; } public manager manager { get; set; } } </code></pre><p>... und sie erhalten eine fehlermeldung:</p><blockquote> <p>der operator '&amp;&amp;' kann nicht auf operanden vom typ 'bool' und 'bool?'</p> </blockquote><p>was ist der optimale/sauberste weg, um damit umzugehen?</p><ol> <li> <p><code>team.category == "a team" &amp;&amp; (team?.manager?.isvietnamvet ?? false)</code></p> <p><em>ist das wirklich lesbar?</em></p> </li> <li> <p><code>team.category == "a team" &amp;&amp; (team?.manager?.isvietnamvet).getvalueordefault()</code></p> <p><em>in linq-to-entities funktioniert es möglicherweise nicht ...</em></p> </li> <li> <p><code>team.category == "a team" &amp;&amp; team?.manager?.isvietnamvet == true</code></p> <p><em>würden sie wirklich <code>if (condition == true)</code> ohne zu zögern schreiben?</em></p> </li> </ol><p>gibt es noch andere möglichkeiten? ist es letztendlich besser zu schreiben:</p><ol start="4"> <li><code>team.category == "a team" &amp;&amp; team.manager != null &amp;&amp; team.manager.isvietnamvet</code></li> </ol>
<p>in diesem speziellen fall kann es ratsam sein, dem <a href="https://en.wikipedia.org/wiki/law\_of\_demeter">gesetz von demeter</a> zu folgen, d.h.</p><pre><code>public class team { public bool ismanagervietnamvet =&gt; manager?.isvietnamvet ?? false; } </code></pre><p>wenn ein boolescher ausdruck komplex oder hässlich ist, gibt es nichts zu sagen, dass sie ihn (oder einen teil davon) nicht in eine separate anweisung aufteilen können:</p><pre><code>bool isvietnamvet = manager?.isvietnamvet ?? false; if (team.category == "a team" &amp;&amp; isvietnamvet) </code></pre><p>wenn sie den code im debugger durchgehen, ist es oft besser, ausgefeilte bedingungen in einem einzigen <code>bool</code> zu packen, um ein wenig mouseover-hovering zu sparen. in der tat könnte es einfacher sein, das ganze in eine <code>bool</code> -variable zu setzen.</p><pre><code>bool isvietnamvetandcategorya = (team.category == "a team" &amp;&amp; manager?.isvietnamvet ?? false); if (isvietnamvetandcategorya) </code></pre><p>oder mit linq:</p><pre><code>var wibble = from flight in airport from passenger in flight.manifest let isonplane = (flight.finishedboarding &amp;&amp; passenger.flight == flight.flightnumber) where !isonplane select passenger; </code></pre>
Parameter von Lambda-Ausdrücken verwenden keine auf Namen basierende Gleichheit, sie verwenden Referenzgleichheit. In Ihrem Ausdruck haben Sie also zwei völlig verschiedene Parameter namens `s` , einer ist definiert, wird aber nicht verwendet, der andere wird verwendet, aber nicht definiert. 

 Also, im Grunde ist Ihr Ausdruck etwas wie `s1 => s2 == "test"` , weshalb er nicht kompiliert werden kann. Die einfachste Lösung wäre, denselben Parameter zu verwenden, den der ursprüngliche Ausdruck verwendet: 


```
LambdaExpression lambda = Expression.Lambda(equal.Body, equal.Parameters.Single());

```
  Wenn Sie wirklich Ihren eigenen Parameter verwenden möchten, müssten Sie alle Instanzen des ursprünglichen Parameters im Lambda-Body durch Ihren neuen Parameter ersetzen. Der beste Weg dies zu tun, ist [`ExpressionVisitor`](http://msdn.microsoft.com/en-us/library/system.linq.expressions.expressionvisitor.aspx) zu verwenden. Eine Route ist nur eine Funktion. Sie können also wie gewohnt Argumente übergeben:


```
<code>// Redirect to /hello/Bob
def helloBob = Action {
    Redirect(routes.Application.hello("Bob"))    
}
</code>
```
Dieser Ausschnitt stammt von<http://www.playframework.org/documentation/2.0/ScalaRouting> (unten) Es steht schon in deiner eigenen Überschrift: **Wegen Assoziativität** (die du NICHT hier zumindest beweisen musst) gilt



```
((A·B)·C)·D = (A·B)·(C·D) = A·(B·(C·D)) = A·((B·C)·D)

```

und alles davon bezeichnen wir als A·B·C·D. Zweitens, sobald all diese äquivalenten Produkte berechnet wurden, erhältst du durch Transponieren:



```
(A·B·C·D)ᵀ = Dᵀ·Cᵀ·Bᵀ·Aᵀ.

```

Ende. Ich wiederhole: hier besteht die Aufgabe nicht darin, Assoziativität zu beweisen, sondern sie zu verwenden/erwähnen. So verstehe ich die Sprache des Übungsgruppenleiters zumindest. <p>die standardmethode für die angabe des objekttyps ist entweder <a href="http://search.cpan.org/perldoc?perlfunc#ref"><code>ref</code></a> oder <a href="http://search.cpan.org/perldoc?scalar::util"><code>scalar::util</code></a> <code>::blessed</code>. wenn sie<em> wissen </em>das objekt gesegnet ist, geben sie dieselbe information zurück. </p><pre><code>my $class1 = blessed( $obj ); my $class2 = ref $obj; </code></pre><p><code>ref</code> gibt jedoch auch 'hash' für nicht gesegnete hashes zurück, während <code>blessed</code> dieses spiel ablehnt. </p><p>für eine liste von methoden ist es für den gesegneten zeigerstil eines perl-objekts einfach, eine davon selbst zu codieren. der folgende code funktioniert ziemlich gut für mich. es gibt die namen der funktionen (diejenigen, die den &quot;code-slot&quot; des angegebenen namens annehmen) zurück, die dem paket zugeordnet sind, das sie definiert. </p><pre><code>sub class\_methods { use class::isa; my $obj = shift; return unless ref( $obj ); my %meth\_names; foreach my $anc ( class::isa::self\_and\_super\_path( ref $obj ), 'universal' ) { my $stash = \%{"$anc\::"}; my @funcs = grep { m/^[\_\p{alpha}]/ # begins with \_ or alpha &amp;&amp; !exists $meth\_names{$\_} # no clobbering &amp;&amp; defined *{$stash-&gt;{$\_}}{code} # has a filled code slot } keys %$stash ; # assign to the "hash slice", keyed by all the entries in @funcs # the value of $anc repeated as many times as elements in @funcs. @meth\_names{@funcs} = ( $anc ) x @funcs; } return %meth\_names; } </code></pre><ul> <li><p>dies funktioniert auch für relativ komplexe objekte, aber wenn das besitzende paket eine menge generierten codes enthält, ist es nicht besonders hilfreich zu wissen, in welchem ​​paket die generatoren den code-pointer stecken. es wird mehr bedeuten, welches paket zu finden ist generiert den code. </p></li> <li><p>ist dies der fall, erhalten sie<em> might </em>den code aus der ausführung ihres codes, einschließlich <a href="http://search.cpan.org/perldoc?data::dumper"><code>data::dumper</code></a> und setzen von <code>$data::dumper::deparse</code> auf 1 wie folgt: (<code>local $data::dumper::deparse = 1;</code>) und dann den code-zeiger wie folgt: <code>say dumper( $code\_ref );</code></p></li> <li><p>es<em> won't </em>funktioniert für gültige methoden, die noch mit einer beliebigen <code>autoload</code>-methode erstellt werden müssen. wenn sie diese in der liste sehen, macht das objekt möglicherweise mehr, aber was es alles tut, wissen sie nicht.</p></li> <li><p>die &quot;basisklasse&quot; <code>universal</code> ist enthalten, da diese klasse verhalten enthält, das vom objekt verwendet werden kann. </p></li> </ul><p>viel glück.</p> Bin upset, wie du!   

  

Anders kann ich es hier . . . Community-kompatibel . . . nicht beschreiben.   

  

Kommt ja noch das „Sahnehäubchen“ obendrauf:   

An Schulen soll die Abgabe n i c h t geleistet werden müssen!!!   

  

Schlage vor, eine Bewegung à la: „Geh-ma in Kita“   

  

. . . zu gründen . . . und s i n g e n d dem Unsinn sofort einen Riegel vorzuschieben.   

  

Welches Lied da wirken könnte . . . mhhh:   

  

„Ein Loch ist im Eimer“ . . . oder:   

  

„What shall we do with the drunken sailor“?   

  

Mehr weiß ich momentan leider auch nicht.   

  

Werd sofort dabei sein, eine Bewegung aktiv zu unterstützen,   

um so einen Quatsch in den Ordner   

  

„Vergeblich versucht“   

  

zu verbannen.   

  

In diesem Fall bin ich optimistisch: Das Problem schaffen wir aus der Welt . . .   

  

. . . und die Menschen, die sowas verdenken . . . dürften sich ihres Jobs   

nicht mehr lange sicher sein!   

  

P.S.: Hab ich grad beim Stöbern in einer FAZ-Glosse gefunden:   

  

„Eine Kindertagesstättenliedgut-   

verwertungsschutzverordnung ist überfällig" . . . *lach*   

  

[http://www.faz.net/s/Rub5A6DAB001EA2420B...](http://www.faz.net/s/Rub5A6DAB001EA2420BAC082C25414D2760/Doc~EEFE7B643269F4B80AF21B2EA35A56536~ATpl~Ecommon~Scontent.html)   

  

PPS:   

  

Rechnung nicht begleichen . . . Mahnungen abwarten . . . evtl. bis zur Androhung, dass ein Gerichtsvollzieher auftaucht.   

  

Nochmal Nachtrag mit etwas mehr Hintergrund:   

  

[http://www.focus.de/finanzen/news/gebueh...](http://www.focus.de/finanzen/news/gebuehren-gema-weist-verantwortung-von-sich_aid_585493.html) <h2>moderne html5-techniken zum ändern von klassen</h2><p>moderne browser haben <a href="https://developer.mozilla.org/en-us/docs/dom/element.classlist"><strong>classlist</strong></a> hinzugefügt, das methoden zur verfügung stellt, mit denen klassen leichter ohne bibliotheken bearbeitet werden können:</p><pre><code>document.getelementbyid("myelement").classlist.add('myclass'); document.getelementbyid("myelement").classlist.remove('myclass'); if ( document.getelementbyid("myelement").classlist.contains('myclass') ) document.getelementbyid("myelement").classlist.toggle('myclass'); </code></pre><p>leider funktionieren diese in internet explorer vor version 10 nicht, obwohl es ein <a href="http://en.wikipedia.org/wiki/shim\_(computing)">shim</a> gibt, um die unterstützung für ie8 und ie9 hinzuzufügen, die unter <a href="https://developer.mozilla.org/en-us/docs/dom/element.classlist">diese seite</a> verfügbar ist. es wird jedoch immer mehr <a href="http://caniuse.com/#feat=classlist">unterstützt</a> .</p><h2>einfache browserübergreifende lösung</h2><p>die standard-javascript-methode zur auswahl eines elements ist <a href="https://developer.mozilla.org/en-us/docs/dom/document.getelementbyid"><code>document.getelementbyid("id")</code></a> . dies wird in den folgenden beispielen verwendet. sie können elemente natürlich auch auf andere weise erhalten. in der richtigen situation können sie stattdessen einfach <code>this</code> verwenden ins detail geht dies nicht in den rahmen der antwort.</p><h3>so ändern sie alle klassen für ein element:</h3><p>um alle vorhandenen klassen durch eine oder mehrere neue klassen zu ersetzen, legen sie das classname-attribut fest:</p><pre><code>document.getelementbyid("myelement").classname = "myclass"; </code></pre><p>(sie können eine durch leerzeichen getrennte liste verwenden, um mehrere klassen anzuwenden.)</p><h3>so fügen sie einem element eine zusätzliche klasse hinzu:</h3><p>um einem element eine klasse hinzuzufügen, ohne vorhandene werte zu entfernen/zu beeinflussen, fügen sie ein leerzeichen und den neuen klassennamen wie folgt hinzu:</p><pre><code>document.getelementbyid("myelement").classname += " myclass"; </code></pre><h3>so entfernen sie eine klasse aus einem element:</h3><p>um eine einzelne klasse zu einem element zu entfernen, ohne andere potenzielle klassen zu beeinflussen, ist ein einfacher regex-ersetzen erforderlich:</p><pre><code>document.getelementbyid("myelement").classname = document.getelementbyid("myelement").classname.replace ( /(?:^|\s)myclass(?!\s)/g , '' ) /* code wrapped for readability - above is all one statement */ </code></pre><p>eine erklärung dieser regex lautet wie folgt:</p><pre><code>(?:^|\s) # match the start of the string, or any single whitespace character myclass # the literal text for the classname to remove (?!\s) # negative lookahead to verify the above is the whole classname # ensures there is no non-space character following # (i.e. must be end of string or a space) </code></pre><p>das flag <code>g</code> weist das ersetzen an, nach bedarf zu wiederholen, falls der klassenname mehrmals hinzugefügt wurde.</p><h3>so prüfen sie, ob eine klasse bereits auf ein element angewendet wurde:</h3><p>der gleiche reguläre ausdruck, der oben zum entfernen einer klasse verwendet wurde, kann auch zur überprüfung verwendet werden, ob eine bestimmte klasse vorhanden ist:</p><pre><code>if ( document.getelementbyid("myelement").classname.match(/(?:^|\s)myclass(?!\s)/) ) </code></pre><p><br/></p><h3>zuweisen dieser aktionen zu onclick-ereignissen:</h3><p>es ist zwar möglich, javascript direkt in die html-ereignisattribute (z. b. <code>onclick="this.classname+=' myclass'"</code>) zu schreiben, dies wird jedoch nicht empfohlen. insbesondere bei größeren anwendungen wird durch die trennung von html-markup von javascript-interaktionslogik ein wartungsfähigerer code erzielt.</p><p>der erste schritt dazu ist das erstellen einer funktion und das aufrufen der funktion im onclick-attribut. beispiel:</p><pre><code>&lt;script type="text/javascript"&gt; function changeclass(){ // code examples from above } &lt;/script&gt; ... &lt;button onclick="changeclass()"&gt;my button&lt;/button&gt; </code></pre><p><sub><em>(es ist nicht erforderlich, dass dieser code in skript-tags enthalten ist. dies ist lediglich der kürze halber als beispiel gedacht. das einschließen von javascript in eine andere datei ist möglicherweise geeigneter.)</em></sub></p><p>der zweite schritt besteht darin, das onclick-ereignis aus dem html-code in javascript zu verschieben, beispielsweise mit <a href="https://developer.mozilla.org/en-us/docs/dom/element.addeventlistener">addeventlistener</a> </p><pre><code>&lt;script type="text/javascript"&gt; function changeclass(){ // code examples from above } window.onload = function(){ document.getelementbyid("myelement").addeventlistener( 'click', changeclass); } &lt;/script&gt; ... &lt;button id="myelement"&gt;my button&lt;/button&gt; </code></pre><p>(beachten sie, dass der window.onload-teil erforderlich ist, damit der inhalt dieser funktion <em>ausgeführt wird, nachdem der html-code</em> vollständig geladen wurde. andernfalls ist das myelement möglicherweise nicht vorhanden, wenn der javascript-code aufgerufen wird, sodass die zeile fehlschlägt .)</p><p><br/></p><h2>javascript frameworks und bibliotheken</h2><p>der obige code ist alles in standard-javascript enthalten. es ist jedoch üblich, entweder ein framework oder eine bibliothek zu verwenden, um allgemeine aufgaben zu vereinfachen und von behobenen fehlern und edge-fällen zu profitieren, an die sie beim schreiben des codes nicht denken.</p><p>während einige leute es für übertrieben halten, ein ~ 50 kb-framework für das einfache ändern einer klasse hinzuzufügen, ist die überlegung, wenn sie umfangreiche javascript-arbeiten ausführen oder etwas, das ungewöhnliches cross-browser-verhalten hat, eine überlegung wert.</p><p><em>(in groben zügen handelt es sich bei einer bibliothek um eine reihe von werkzeugen, die für eine bestimmte aufgabe entwickelt wurden, während ein framework im allgemeinen mehrere bibliotheken enthält und eine reihe von aufgaben ausführt.)</em></p><p>die obigen beispiele wurden im folgenden mit <a href="http://jquery.com">jquery</a> wiedergegeben, wahrscheinlich der am häufigsten verwendeten javascript-bibliothek (obwohl es auch andere gibt, die es zu untersuchen gilt).</p><p>(beachten sie, dass <code>$</code> hier das jquery-objekt ist.)</p><h3>klassen mit jquery ändern:</h3><pre><code>$('#myelement').addclass('myclass'); $('#myelement').removeclass('myclass'); if ( $('#myelement').hasclass('myclass') ) </code></pre><p>darüber hinaus bietet jquery eine verknüpfung zum hinzufügen einer klasse, wenn sie nicht angewendet wird, oder zum entfernen einer klasse, die folgendes ausführt:</p><pre><code>$('#myelement').toggleclass('myclass'); </code></pre><p><br/></p><h3>zuweisen einer funktion zu einem klickereignis mit jquery:</h3><pre><code>$('#myelement').click(changeclass); </code></pre><p>oder, ohne eine id zu benötigen:</p><pre><code>$(':button:contains(my button)').click(changeclass); </code></pre><p><br/></p> Hallo,

der Ansatz ist richtig. Hallo,


tatsächlich kann man beides sagen,**I'm good** und **I'm fine** (siehe: **<http://www.quickanddirtytips.com/education/grammar/good-versus-well?page=1>**).  



Ich persönlich ziehe **I'm fine** vor - alternativ **I'm ok** - oder wie hier auch schon vorgeschlagen in besagter Situation **No, thanks**.


:-) AstridDerPu Wenn eine Spalte in der Datenbank nullfähig ist, hat die Ergebnisklasse auch eine nullfähige Eigenschaft. 

 Wenn beispielsweise eine `Order` eine `Datetime` Spalte mit dem Namen `CreatedDate` , sieht die resultierende `Order` Klasse in etwa wie folgt aus: 


```
public partial class Order: EntityObject
{
  ...
  private DateTime? _createdDate;
  ...
}

```
  Wenn \_ `createdDate` keinen Wert hat, wenn Sie `ObjectContext.SaveChanges()` aufrufen, wird eine `System.DBNull` automatisch als Teil des Befehls insert oder update an die Datenbank gesendet. 

 Hoffe das hilft Alex [bild] nadja:

was macht dieses „es“ hier?

meine antwort: es (nämlich das „es“) macht hier ein stilistisches no-go. wenn ein attributiv gebrauchtes part. i ein objekt führt, und dieses dann durch ein anaphorisches „es“ stellvertreten wird - ganz übel.

jedenfalls kompliment für dich, dass du e…