C # : 단일 명령문에서 동일한 값을 여러 변수에 지정


161

C #에서 단일 명령문으로 한 번에 하나의 값을 여러 변수에 할당하는 방법이 있습니까?

이 라인을 따라 뭔가 (의사 코드) :

int num1 = 1;
int num2 = 1;

num1 & num2 = 5;

아마 그렇지는 않지만 비슷한 것이 실제로 가능한 경우 물어볼 가치가 있다고 생각했습니다!

답변:


259

다음과 같이 간단합니다.

num1 = num2 = 5;

변수 대신 객체 속성을 사용하는 get경우 중간 값 의 접근자가 호출되지 않는다는 것이 흥미 롭습니다 . set할당 순서에서 액세스 한 모든 속성에 대해 접근 자만 호출됩니다.

예를 들어 콘솔마다 쓰기가있는 클래스 받아 getset접근 호출됩니다.

static void Main(string[] args)
{
    var accessorSource = new AccessorTest(5);
    var accessor1 = new AccessorTest();
    var accessor2 = new AccessorTest();

    accessor1.Value = accessor2.Value = accessorSource.Value;

    Console.ReadLine();
}

public class AccessorTest
{
    public AccessorTest(int value = default(int))
    {
        _Value = value;
    }

    private int _Value;

    public int Value
    {
        get
        {
            Console.WriteLine("AccessorTest.Value.get {0}", _Value);
            return _Value;
        }
        set
        {
            Console.WriteLine("AccessorTest.Value.set {0}", value);
            _Value = value;
        }
    }
}

출력됩니다

AccessorTest.Value.get 5
AccessorTest.Value.set 5
AccessorTest.Value.set 5

컴파일러가 모든 속성에 값을 할당하고 할당 될 때마다 값을 다시 읽지 않음을 의미합니다.


36
실제로 이상하지 않습니다. 논리는 다음과 같습니다. 할당 작업 자체는 할당 된 값인 값을 반환합니다. 실행 순서는 다음 num1 = (num2 = 5)과 같습니다. 첫 번째로 실행 된 할당 ( num2 = 5)은 값 5를 외부 세계에 반환합니다.이 할당은 num1에 할당됩니다. 이것은 무한대로 작동합니다 ( num0 = num1 = num2 = 5).
Jpsy

테스트하려면을 시도하십시오 Console.WriteLine(num = 5);. (면책 조항 : 아직하지 않았습니다)
Arlen Beiler

3
질문 : 이것은 나쁜 습관으로 간주 num1 = num2 = 5됩니까? 더 많은 변수가 관련되면 코드를 읽을 수 없게됩니까? 도용하여 죄송합니다. 새 게시물을 만들고 싶지 않았습니다.
johnildergleidisson

정답이 없습니다. 내 프로그램에서는 거의 사용하지 않으며 피할 수있었습니다.
Pierre-Alain Vigeant

코딩 스타일로 내려갑니다. 답장을 보내 주셔서 감사합니다.
johnildergleidisson

54

이것은 당신이 원하는 것을 원할 것입니다 :

int num1, num2;
num1 = num2 = 5;

'num2 = 5'할당은 할당 된 값을 반환합니다.

이렇게하면 num1 = (num2 = 5) +3;읽기가 쉽지 않은 것으로 권장하지는 않지만 num1에 8을 할당하는 것과 같은 미친 일 을 할 수 있습니다.


더 이상 작동하지 않습니다.
Aurelien B

33
int num1=5,num2=5

동일한 명령문에서 변수 선언 및 지정


이것이 하나의 진술입니까, 아니면 두 개의 진술입니까?
Merin Nakarmi

좋은 대답이지만 "5"가 긴 문자열 상수 인 경우 이상하게 보입니다. string a = "really long string", b = "really long string";
Alex

13

구문이 조금 더 짧지 만 다른 사람들이 이미 말한 것을 취합니다.

int num1, num2 = num1 = 1;

초기화와 할당을 단일 문으로 수행 할 수 있기 때문에 이것이 최선의 해결책이라고 생각합니다.
Sachin Parashar

11

이 시도:

num1 = num2 = 5;

VB에서는 작동하지 않습니다.


1
VB 개발자를위한 대체 구문이 있는지 또는 VB에서 다중 할당을 사용할 수 없는지 알고 있습니까?
ckittel

3
@cki : AFAIK, 지원되지 않습니다.
SLaks

@ckittel VB에서는 =대입과 평등에 모두 사용되므로 num1 = num2 = 5"5가 num2변수와 같은지 여부에 대한 부울 결과 할당"을 의미합니다 num1. 때문에 =오퍼레이터는 두 가지 의미를 가지고,이 구문을 나타낼 수있는 방법이 없다. 당신이 할 수있는 최선의 방법은 byref값뿐만 아니라 많은 매개 변수를 취하고 모든 매개 변수를 해당 값에 할당 하는 함수를 만드는 것입니다 .
Servy


5
int num1, num2, num3;

num1 = num2 = num3 = 5;

Console.WriteLine(num1 + "=" + num2 + "=" + num3);    // 5=5=5


5

예를 들면 다음과 같습니다.

int num1 = 1;
int num2 = 1;

num1 = num2 = 5;


0

이것은 이제 C #의 것입니다.

var (a, b, c) = (1, 2, 3);

위의 작업을 수행하면 기본적으로 세 가지 변수를 선언 한 것입니다. a = 1, b = 2c = 3. 한 줄에 모두 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.