2017-10-16 6 views
2

에서운영자 : "부울 ++"C#을

public void Main() 
{ 
    int i = 0; 
    Console.WriteLine($"I was {i++}, now I is {i}"); 
    bool b = true; 
    Console.WriteLine($"B was {b}, now B is {b}"); 
} 
//I was 0, now I is 1 
//B was True, now B is True 

B 값 "인라인"를 변경할 수있는 가능성이 있습니까?

실제 필요 : 인라인 면도기에서

bool isActive = true; 
@foreach(var item in list) { 
    <li class="@(isActive-- ? "active": "")">... 
} 

integers와 실제 예를 들어

<li class="active">... 
<li class="">... 
<li class="">... 
<li class="">... 
<li class="">... 

해결을 생산 :

int isActive = 1; 
@foreach(var item in list) { 
    <li class="@(isActive-- > 0 ? "active": "")">... 
} 
+0

부정 연산자 또는?당신은 항상 부정 연산자와 같은 –

+0

과 같은'if (b = DoSomething()))을 가질 수 있습니다 – Serge

+0

"변경"이란 무엇을 의미합니까? – Amy

답변

-1

당신은 @를 사용할 수 있어야합니다 () 표현식 구문 :

<li class="@(isActive ? "active" : " ")">My link here</li> 
+0

그냥 첫 번째 활성 클래스가 필요합니다. 다른 것들은 그렇지 않습니다. – Serge

+0

당신은 다른 부분을 비워 둘 수 있습니다. 작동 할 것입니다. – lazydeveloper

+0

한 번만 true에서 false로 변경하려면 isActive가 필요합니다. – Serge

1

할당 연산자를 인라인으로 적용 할 수 있습니다. 당신의 면도기보기 예를 들어 당신이 (AB)는 다음과 같이 사용할 수 있습니다 들어

// b = !b both assigns false to b and returns assigned value 
Console.WriteLine($"B was {b}, now B is {b = !b}"); 
// B was True, now B is False 

: 그것은 할당 된 값을 반환

bool active = true; 
Console.WriteLine($"B is {(active ? (active = false) ? "" :"active" : "")}"); 
Console.WriteLine($"B is {(active ? (active = false) ? "" : "active" : "")}"); 
Console.WriteLine($"B is {(active ? (active = false) ? "" : "active" : "")}"); 
// outputs B is active 
// B is 
// B is 

하지 나는이 좋습니다,하지만 당신이 말한대로 그냥 언어 질문입니다.

+0

내 Razor 샘플에서 어떻게 작동합니까? @ (isActive? changeIt) – Serge

+0

정수가있는 솔루션을 찾았습니다 (bool이 더 복잡함). – Serge

0

inlining에서 변수를 변경한다는 의미로 if-conditition이 가능합니다.

var b = false; 
if((b = !b) == true) { 
    Console.WriteLine("Hi"); 
} 

이 메시지는 Hi을 인쇄합니다.

문자열을 포맷하거나 동안 같은 당신의 면도기 문에 간다 : 당신의 예에 대해서는

Console.WriteLine($"b was {b}, now b is {b = !b}"); 
// b was true, now b is false 

이 하나 ternary if 문을 수 없습니다.

변수를 거짓으로 설정하고 이 아닌 인쇄 활성으로 설정할 수 있습니다.

b ? (b = false) : ""; 

우리는 다음 둥지 다른 if 문은 활성를 인쇄 할 수 있습니다. b이 이미 false이므로 b를 무효화해야합니다. else 경로에있는 빈 문자열에는 절대 도달하지 않지만 컴파일러를 만족시키는 데 필요합니다.

!(b = false) ? "active" : "never reached" 

그 결합 후 우리는 얻을 : 이것은 첫 번째 항목에 대한 active을 방출합니다

b ? (!(b = false) ? "active" : "") : ""; 

.

var b = true; 
Console.WriteLine(b ? (!(b = false) ? "active" : "") : ""); // prints "active" 
Console.WriteLine(b ? (!(b = false) ? "active" : "") : ""); // prints "" 
Console.WriteLine(b ? (!(b = false) ? "active" : "") : ""); // prints "" 
+0

감사합니다. 업데이트 된 OP 예제 – Serge

+0

에 Razor 솔루션을 제안 해주세요. @ Serge가 도움이됩니까? – Iqon

+0

읽을 수 없기 때문에 마침내 버려진이 아이디어가 나왔습니다. 코드에 넣으면 그 의미가 무엇인지 이해할 수 있습니다. @evk 예제가 더 읽기 쉽습니다. 결국 마침내 Integer 솔루션을 사용했습니다. . 내 일에 좋은 해결책을 찾지 못했습니다 ... – Serge