C #: Wie man eine generische Methode mit der Variablen "out" verwendet

8

Ich möchte eine einfache generische Funktion erstellen

%Vor%

Verwendung:

%Vor%

Meine Frage ist, wie programmieren Sie den Code, um diese Werte zu setzen, dh. die fehlenden Codes im Kommentarbereich.

Danke für jede Hilfe.

    
Tin Vo 14.11.2009, 21:56
quelle

4 Antworten

16

Sieht so aus, als ob du es in diesem Fall machst, um zu vermeiden, zu boxen? Schwer zu sagen, ohne mehr Informationen, aber für dieses spezielle Beispiel wäre es viel einfacher und wahrscheinlich weniger fehleranfällig, nur Methodenüberladung zu verwenden:

%Vor%

Um hier speziell zu erfahren, was ist, müssen Sie einen Wert in ein Objekt umwandeln, bevor Sie ihn in den generischen Typ umwandeln:

%Vor%

Was IMO ist ziemlich böse und sollte ein letzter Ausweg sein - macht sicherlich nicht Ihren Code sauberer.

Jedes Mal, wenn Sie generische Parameter typisieren, ist dies ein gutes Anzeichen dafür, dass Generika nicht die richtige Lösung für Ihr Problem sind. Generische Parametertypprüfungen machen Ihren Code komplexer, nicht einfacher. Es macht eine Methode verantwortlich für verschiedene Verhaltensweisen, die auf dem Typ basieren, und nicht auf einer Reihe einzelner Methoden, die leicht geändert werden können, ohne die anderen zu beeinträchtigen. Siehe Grundsatz der einfachen Verantwortlichkeit .

>     
Rex M 14.11.2009 22:02
quelle
3

Zunächst einmal ist das ein sehr schlechtes Muster. Sie sollten diese Art von Muster nicht verwenden. Vielleicht, wenn Sie beschreiben, was Sie wirklich erreichen wollen, gibt es bessere Antworten.

Code unten funktioniert, aber wie ich schon sagte Code schreiben ist eine schlechte Idee.

%Vor%

Und Verwendung:

%Vor%     
empi 14.11.2009 22:10
quelle
1
%Vor%     
ITpotter 07.09.2011 07:28
quelle
0

Hier ist eine Möglichkeit:

%Vor%

Aber dieser Code riecht wirklich schlecht und geht gegen den Sinn von Generika (verwende stattdessen überladene Methoden). Ich hoffe, dass dies nicht irgendwo im Produktionscode endet und nur der Erbauung dient.

    
jason 14.11.2009 22:03
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ qstntxt ___

Ich versuche, die eindeutigen Einschränkungen einer Tabelle mit Java zu finden (auf einer Oracle-Datenbank, aber das sollte keinen Unterschied machen).

Ich habe einen Weg gefunden, um die Primärschlüssel einer Tabelle zu entdecken, dank DatMetData's getPrimaryKeys (....); Jedoch konnte ich die einzigartigen Konstanten der Tabellen nicht finden, und das Internet konnte mir nicht helfen, daher beende ich hier meine Frage:)

Gibt es einen sauberen Weg, um die eindeutigen Bedingungen (oder besser gesagt die Namen der Spalten, die für eine Tabelle eindeutig sein müssen, zu finden. Nun, Sie bekommen es hehe) einer Tabelle? Mit freundlichen Grüßen,

Nils

    
___ answer1677081 ___

Eindeutige Einschränkungen werden normalerweise von einem Index erzwungen. Vielleicht verwenden Sie %code% , um die Indizes zu finden, bei denen der nicht eindeutige Wert falsch ist?

    
___ answer1674401 ___

Wenn Oracle Indizes für eindeutige Constraints erstellt (ich weiß nicht, ob dies der Fall ist, müssen Sie das überprüfen), dann können Sie über %code%

Ihre Constraints herausfinden     
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ tag123oracle ___ Oracle Database ist ein Datenbankmanagementsystem mit mehreren Modellen, das von Oracle Corporation erstellt wurde. Verwenden Sie dieses Tag NICHT für andere Produkte von Oracle wie Java und MySQL. ___ answer1674293 ___

Sie können das Datenwörterbuch abfragen:

%Vor%     
___ tag123unique ___ Bezieht sich auf ein Element, das sich deutlich von allen anderen Elementen in einer Sammlung unterscheidet. ___ tag123constraints ___ Eine Einschränkung ist eine Bedingung, die in einem bestimmten Kontext erfüllt sein muss. Constraints werden typischerweise in Datenbanken und Programmiersprachen verwendet, um Fehler zu erkennen, Datenkonsistenz und Genauigkeit sicherzustellen und Geschäftsanforderungen durchzusetzen. ___ answer48042309 ___

Da die meisten Datenbanken diese Einschränkungen als Index speichern, können Sie DatabaseMetaData.getIndexInfo () wie bereits erwähnt. Dies funktionierte gut bei der Verwendung von Postgresql .

Es ist nur wichtig, %code% mit dem vierten Parameter als %code% aufzurufen, da die Dokumentation besagt:

  

%code% - wenn wahr, nur Indizes für eindeutige Werte zurückgeben; wenn falsch,   Rückgabe von Indizes unabhängig davon, ob eindeutig oder nicht

Mit dem folgenden Code:

%Vor%

können Sie anrufen:

%Vor%

und erhalten Sie eine Liste aller eindeutigen Einschränkungen für eine bestimmte Tabelle zurück. Die Einschränkungen sind nach Index gruppiert, da ein Index mehrere Spalten abdecken kann, wenn sie nur in Kombination eindeutig sind.

    
___