버그 해결을 위한 모든 질문을 던져
0 votes
78 views

유니티가 업데이트가 되고 C#새로운 버전 적용이라던지 하면서 굉장히 좋아졌는데요.

최근에.

?. 문법과 ??, ??= 에 빠져서 지내고 있습니다.

 

아래와 같은 형식을

if (null != data)
{
    data.SetValue(10);
}

아래와 같이 아주 심플하게 쓸수 있는게 좋은것 같습니다.

data?.SetValue(10);

이런 코드도 잇습니다.

if (null == _instance)
{
    _instance = FindObjectOfType<T>();
    if (null == _instance)
    {
        GameObject obj = new GameObject();
        _instance = obj.AddComponent<T>();
    }
}

return _instance

get => _instance ??= FindObjectOfType<T>() ??(_instance = new GameObject().AddComponent<T>());

아주 깔금해져서 좋은데요..

 

 

이런 형식의 사용은 어떻게 바꿔야 할지 모르겠습니다.


if (null != TargetCamera)
{
    TargetCamera.orthographicSize = size;
}

아래와 같이 사용하면 될것 같지만.

TargetCamera?.orthographicSize = size;

에러가 납니다..

만약. orthographicSize가 프로퍼티가 아니라 함수면 문법에 문제가 없는데.

프로퍼티다보니까 문제가 생기는것 같은데.

이거 혹시 처리하는 방법 있을까요..??

asked (31 point) , 78 views

1 답변

+1 vote
없습니다. C#의 스팩에서 ?. 는 동시성 처리를 위해 반드시 한 틱 안에 가능해야 합니다.

?. 이후 = 연산자를 쓰면 C#입장에서는 CAS연산 (Compare And Swap)으로 동작해야 하는데 이것은 primitive type이나 포인터 연산정도만 가능합니다.

https://chickenpaella.tistory.com/97

CAS에 대한 참고자료는 위와 같습니다.

다소 불편하게 생각되더라도 위의 동작은 메서드를 추가해서 작업하셔야 할것같습니다.
answered (282 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

481 질문
636 answers
613 댓글
87,251 users