الرجاء شرح بناء جملة C# إلى vb-er
-
06-07-2019 - |
سؤال
لدي مقتطف الكود التالي:
// Notify the source (the other control).
if (operation != DropOperation.Reorder) {
e = new DroppedEventArgs()
{
Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere,
Source = src,
Target = this,
DroppedItems = srcItems
};
src.OnDropped(e);
}
أنا لا أفهم
Operation = operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere
خط.
يمكن للشخص أن يفسر ذلك؟للسجل...dropOperation هو التعداد.هل يمكنك إعطاء المكافئ النحوي لـ vb هو كل ما أحتاجه.
سيث
المحلول
والسبب أنه من الصعب أن نفهم ويرجع ذلك إلى حقيقة أن كنت غير مألوف مع المشغل الثلاثي:. أساسا ما تقوم به هو تقييم تعبير، والعودة واحد من اثنين القيمة اعتمادا على ما إذا عاد تقييم <م> صحيح م> أو <م> كاذبة م>.
وعلى سبيل المثال، فإن التعبير التالي عودة "صحيح" إذا كانت منطقية هو الصحيح، و "كاذبة" elsewise:
bool test = false;
string testString = test ? "true" : "false";
ويفعل في الواقع موجودة في VB.NET كذلك - أعرب بعض الشيء على الرغم مختلف. العبارتين التاليتين على التوالي في C # و VB.NET هي في الواقع نفس
Dim s As String = If(True, "kek", "lol")
string s = true ? "kek" : "lol";
والفرق بين معهد التمويل الدولي والمشغل tenary هو أن معهد التمويل الدولي سيقيم دائما كل من المعلمة الثانية والثالثة لمعهد التمويل الدولي هي وظيفة بدلا من المشغل. لهذا السبب المشغل tenary بكثير تفضل.
ملاحظة م>: تمت إضافة مشغل tenary في VB 9، لذلك إذا كنت تستخدم الإصدارات السابقة سوف تضطر إلى الاعتماد على وظيفة معهد التمويل الدولي لهذه الوظيفة.
نصائح أخرى
If (operation = DropOperation.MoveToHere) Then
Operation = DropOperation.MoveFromHere
Else
Operation = DropOperation.CopyFromHere
End If
رابط ويكيبيديا الإلزامي.لقد تخليت عن ذكر هذا الرابط في تعليق فها هو في إجابة.يمكنك استبدال استخدامات ?المشغل مع المكالمات إلى وظيفة IIF:
Operation = IIF(operation = DropOperation.MoveToHere, DropOperation.MoveFromHere, DropOperation.CopyFromHere)
لاحظ أنهما ليسا متكافئين بشكل صارم، منذ معهد التمويل الدولي وظيفة يقيم كلاً من الحالة الصحيحة والخاطئة، في حين أن ؟ المشغل أو العامل يقيم فقط الحالة التي يرجعها.
ومن <م> نوع من م> يعادل IIf
وظيفة في VB.NET (انظر التعليق براين):
Operation = IIf(operation = DropOperation.MoveToHere, _
DropOperation.MoveFromHere, _
DropOperation.CopyFromHere)
في C # وهذا ما يسمى مشروطة مشغل ، وغير نوع من اختصار للو / بيان آخر بسيط.
وهذه هي المشغل المشروط، وهو مشابه جدا لفي VB <لأ href = "http://msdn.microsoft.com/en-us/library/27ydhh0d٪28VS.71٪29.aspx" يختلط = "نوفولو noreferrer "> IIf
وظيفة:
وإرجاع أحد كائنين، اعتمادا على تقييم تعبير.
اقتباس فقرة>Public Function IIf( _
ByVal Expression As Boolean, _
ByVal TruePart As Object, _
ByVal FalsePart As Object _
) As Object
في هذا المثال بالذات أن تكون مكتوبة وظيفة IIf
مثل هذا:
Operation = IIF((operation = DropOperation.MoveToHere), _
DropOperation.MoveFromHere, _
DropOperation.CopyFromHere)
وهذا يستخدم مشغل ?
أ > لتخصيص مشروط. هذا الخط هو نحوي السكر أساسا ل:
// C# expanded example
if (operation == DropOperation.MoveToHere)
{
Operation = DropOperation.MoveFromHere;
}
else
{
Operation = DropOperation.CopyFromHere;
}
والتي، في VB، من شأنه أن يكون معادلا ل:
If operation = DropOperation.MoveToHere Then
Operation = DropOperation.MoveFromHere
Else
Operation = DropOperation.CopyFromHere
End If
operation == DropOperation.MoveToHere ? DropOperation.MoveFromHere : DropOperation.CopyFromHere
وهذا ما يسمى المشغل الثلاثي. انها في الاساس وسيلة قصيرة من الكتابة:
if (operation == DropOperation.MoveToHere)
return DropOperation.MoveToHere;
else
return DropOperation.CopyFromHere;
ووبناء ?:
هي المشغل الثلاثي، في الأساس if (x) y else x
المضمنة. وينظر إلى مصلحة المضمنة هنا في أن يتم تعيينه فورا إلى متغير. لا يمكنك أن تفعل ذلك مع بيان إذا.
وC # المدونين استخدام "؟" كثير. انظر هذا الرمز:
int Foo(int x, int y){
return x==y? 10: 11;
}
هل يساوي:
int Foo(int x, int y){
if (x==y)
return 10;
else
return 11;
}
ومجرد قراءة البئر وأوضح الجواب دونات ل!!
و( "VB-إيه" أنا أحب المدى)