문제

다음 코드 스 니펫이 있습니다.

        // 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 선.

누군가 설명 할 수 있습니까? 레코드의 경우 ... 드롭 프로칭은 열거입니다. VB 구문을 제공 할 수 있습니까?

세스

도움이 되었습니까?

해결책

이해하기 어려운 이유는 당신이 3 원 운영자에게 익숙하지 않기 때문입니까? :. 기본적으로 그것이하는 일은 표현식을 평가하고 평가가 반환되는지 여부에 따라 두 값 중 하나를 반환하는 것입니다. 진실 또는 거짓.

예를 들어, 부울이 참이면 다음 표현이 "true"를 반환하고 "거짓"은 다음과 같습니다.

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";

IIF와 테니 연산자의 차이점은 IIF가 연산자 대신 함수이기 때문에 IIF가 항상 두 번째 및 세 번째 매개 변수를 모두 평가한다는 것입니다. 이러한 이유로 테나리 운영자는 선호합니다.

메모: 테나리 연산자는 VB 9에 추가되었으므로 이전 버전을 사용하는 경우이 기능의 IIF 기능에 의존해야합니다.

다른 팁

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 이후로 그들은 엄격하게 동등하지 않습니다. 기능 진실과 거짓 사건을 모두 평가하는 동안? 운영자 반환하는 경우 만 평가합니다.

그것은이다 일종의 동등한 IIf vb.net의 기능 (Brian의 의견 참조) :

Operation = IIf(operation = DropOperation.MoveToHere, _
                DropOperation.MoveFromHere, _
                DropOperation.CopyFromHere)

C#에서 이것은라고합니다 조건부 운영자, 간단한 if/else 문을위한 일종의 단축키입니다.

이것은 조건부 운영자이며 VB와 매우 유사합니다. 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

이것을 3 배 연산자라고합니다. 기본적으로 짧은 글쓰기 방법입니다.

if (operation == DropOperation.MoveToHere)
  return DropOperation.MoveToHere;
else
  return DropOperation.CopyFromHere;

그만큼 ?: 구조는 3 배의 연산자이며 기본적으로 인라인입니다 if (x) y else x. 인라인의 이점은 여기서 변수에 즉시 할당된다는 점에서 볼 수 있습니다. IF 문으로는 그렇게 할 수 없습니다.

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-er"나는 용어를 좋아한다)

그것은 The라고합니다 3 배 운영자. 나는 그것이 VB에 존재한다고 생각하지 않지만 기본적으로 if/else의 속기 일뿐입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top