Warum wird die mit () - Konstrukt nicht enthalten in C#, wenn es ist wirklich cool in VB.NET?

StackOverflow https://stackoverflow.com/questions/429890

  •  07-07-2019
  •  | 
  •  

Frage

Ich bin C# - Entwickler.Ich Liebe wirklich die geschweifte Klammer, da kam ich aus C -, C++ - und Java-hintergrund.Aber ich mag auch die anderen Programmier-Sprachen .NET-Familie wie VB.NET.Hin-und herschalten zwischen C# und VB.NET ist nicht wirklich groß ist der deal, wenn Sie wurden in die Programmierung für eine Weile in .NET.Das ist sehr gemeinsames Konzept in der Firma, wo ich arbeite.Als C# - Typ, ich mag die XML-literalen und with keywords zur Verfügung gestellt von der VB.NET compiler.Ich wünschte, Microsoft hätte diese Funktionen in C# auch.

Ich bin einfach nur neugierig , was andere Entwickler zu sagen haben!

War es hilfreich?

Lösung

würde ich nicht überrascht, wenn „Mit“ oder einer ähnlichen Funktion hinzugefügt C # schließlich zusammen mit anderen bisher belieben ausschließlich VB Funktionen. Es gab in den C # 4.0 Vorschau Präsentationen vor kurzem bei PDC und an anderer Stelle des erhöhten „Fokus auf Sprache Parität“, beginnend mit C # 4.0 und VB 10 viel von mir reden.

Andere Tipps

Ich persönlich mag es nicht, wenn es ist verwendet nach Bau -, wenn Sie tun müssen mehrere Dinge mit einem Objekt, nachdem es initialisiert wird, in der Regel, dass Verhalten sollte, werden gekapselt in der Art selbst.Wenn Sie wirklich wollen, um etwas zu tun, es ist nur eine Frage der Deklaration einer kurzen variable und Optional mit der Einführung eines neuen Anwendungsbereich.

Jedoch, es ist sinnvoll können kompakt initialisieren ein Objekt mit mehreren Eigenschaften - das ist genau, warum C# 3 können Sie schreiben:

MyObject x = new MyObject { Name="Fred", Age=20, Salary=15000 };

Gibt es dabei Einschränkungen (die die optionale und benannte Parameter in C# 4 wird helfen, zu überwinden), aber es ist besser als das, es war ohne was zu möglichen Verwirrungen/Unklarheiten.

(Auf XML-literal vor, ich bin wieder mit dem C# - team - XML ist eine sehr spezifische Technologie in einer Sprache.Wenn Sie kommen könnte mit eine generalisierte form, die zufällig zum erstellen von XML, aber könnte verwendet werden, um die anderen Bäume auch, das wäre schön - genau wie Abfrage-Ausdrücke sind nicht direkt mit IEnumerable oder IQueryable.)

Sie können VB.Net die With ersetzen durch einen schnellen Ein-Buchstaben-Variablennamen zu schaffen. Es ist eigentlich weniger Code, da With auch später eine End With erfordert.

Zum Beispiel, eine Sache, die ich verwendet, um brauchen ziemlich oft zu tun in einer Datentabelle für eine Steuerung / Pause-Stil Bericht über die Zeilen iterieren.

In vb.net, dass könnte wie folgt aussehen:

Dim CurCustomerName As String 
Dim CustomerSalesTotal As Decimal

Dim ds As DataSet = GetReportData()
With ds.Tables(0).Rows
   Dim i As Integer = 0
   While i < .Count
       ''//{
       CurCustomerName = .Item(i)("CustName")
       CustomerSalesTotal = 0
       PrintHeaderLine(CurCustomerName)

       While i < .Count AndAlso CurCustomerName = .Item(i)("CustName")
            ''//{
            PrintItemLine(.Item(i)("OrderTotal"))
            CustomerSalesTotal += .Item(i)("OrderTotal")

            i+= 1
       End While ''//}
       PrintSubTotalLine(CustomerSalesTotal)
   End While ''//}
End With

Die C # würde wie folgt aussehen:

string CurCustomerName;
Decimal CustomerSalesTotal;

DataSet ds = GetReportData();
DataRowCollection r = ds.Tables[0].Rows;
int i=0;
while (i<r.Count)
{
    CurCustomerName = r[i]["CustName"];
    CustomerSalesTotal = 0;
    PrintHeaderLine(CurCustomerName);

    while (i<r.Count && CurCustomerName == r[i]["CustName"])
    {
        PrintItemLine(r[i]["OrderTotal"]);
        CustomerSalesTotal += r[i]["OrderTotal"];

        i++;
    }
    PrintSubTotalLine(CustomerSalesTotal);
}

Das, was hier zu bemerken ist, dass die C # -Version tatsächlich weniger Typisierung benötigt, da die VB nicht WITH mit dem Array-Index kombinieren könnte, und hatte durch die .Item Eigenschaft für bestimmte Dinge zu gehen. Es ist keine große Sache hier, aber vorstellen, wenn der Bericht 20 Felder, Anspiel 2 und hatte auf 3 Artikel brechen statt 1

Natürlich könnte man die Technik in C # als auch für VB demonstriert verwenden. Aber die Hauptsache zu beachten ist, dass WITH wirklich nicht geben Ihnen viel.

Es geht um Entwickler Vorlieben, aber ich bin mit Ihnen über MIT. Meine Präferenz ist die Anzahl der Variablen im Spiel zu minimieren und den Umfang, in dem sie leben. Die Philosophie von C # scheint sehr ähnlich zu sein. Aber in diesem Fall ist die Antworten hier scheinen darauf hinzudeuten, dass das Hinzufügen (und machen Sie sich verantwortlich für) eine Variable ist eine gute Sache im Vergleich zu einem Konstrukt, das, zu mir, ist sehr ähnlich wie Lambda-Ausdrücke.

Ich halte es für ziemlich willkürlich ist, nur ‚Masse‘ Eigenschaftseinstellung während der Initialisierung zu ermöglichen. Ich wirklich nicht, warum dies wäre ‚schlecht‘:

MyObj myObj = ObjFactoryFunction();

...

if(someCondition)
  myObj { Prop1 = 1, Prop2 = 2 };

Ich glaube, dass dieses Beispiel-Code ist sauber und präzise.

Normalerweise, wenn ich eine Anfrage für eine with Funktion in C # zu sehen, sehe ich Code, der von Refactoring profitieren würde. Normalerweise, wenn das Refactoring durchgeführt wird, die vermeintliche Notwendigkeit with ist weg.

Ich mag die Art und Weise mein Code funktioniert, wenn ich eine fließend Schnittstelle in zu einem Objekt bauen; es hat einige Ähnlichkeiten mit with. Wenn ich MessageBox.Show() entwarf, ich könnte schreiben:

new MessageBox()
    .SetText("Hello World!")
    .SetButtons(MessageBox.Buttons.OK)
    .SetIcon(MessageBox.Icon.Information)
    .Show();

Sie können auch etwas ähnliches mit Linq sehen:

var q = Enumerable.Range(1, 100)
            .Where(x => x % 2 == 0)
            .Select(x => x * x);

Es fühlt sich ein bisschen wie with aber natürlich in der Sprache zu passen scheint, habe ich bereits.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top