سؤال

لدي مقتطف الكود التالي:

        // 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)
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-إيه" أنا أحب المدى)

scroll top