if문
if 문에서 사용하는 조건식은 bool형식
if -> else if -> else if-> .... ... ... -> else
if 문 안에 return; : 현재 메소드를 종결하는 점프문으로서의 기능
if 문 안에 retrun <값> : 값 반환
switch문
switch (조건식)
{
case 상수 1: -> 조건식 == 상수1일 case (==이 생략됐다고 보자)
//실행할 코드
break; -> break : 조건식과 일치할 경우 switch문 바깥으로 이동
case 상수 2:
//실행할 코드
break;
case 상수 N:
//실행할 코드
break;
defalut: -> 조건식이 어떤 경우와도 맞지 않은 경우
//실행할 코드 -> 생략가능
break;
switch문에 사용되는 조건식 : 정수 형식, 문자열 형식, 7.0부터는 데이터 형식도 조건으로 가능. 총 3개만 가능
: (부동 소수형도 가능은 하지만 반올림 오차가 있어 사용 자제해야 함)
break대신 goto나 return같은 점프문을 사용하는 것도 문법적으로 허용되지만 대개는 break 사용
C# 7.0부터 가능한 swtich문의 조건식으로 데이터 형식 사용하는 예제
using System;
class MainApp
{
static void Main(string[] args)
{
object obj = null;
string s = Console.ReadLine()
if(int.TryParse(s, out int out_i)) // ReadLine으로 입력받은게 int로 형변환됐다면
obj = out_i;
else(float.TryParse(s, out float out_f)) //ReadLine으로 입력받은게 float으로 형변환됐다면
obj = out_f;
else
obj = s;
switch(obj)
{
case int i: //switch의 조건식 == int i . (==이 생략된거라고 보면됨)
//여기서 int i 라고 변수지정안하고 case: int 만 써도 돌아가긴함
Console.WriteLine($"{i}는 int형식입니다");
break;
case float f:
Console.WriteLine($"{f}는 float형식입니다");
break;
default:
Console.WriteLine($"{obj}는 모로는 형식입니다");
break;
}
}
+ case조건옆에 when 사용가능
case false When a ==0 :
Console.WriteLine(....
+ 두개 이상조건의 case에 같은 출력을 구현하고 싶으면
case 100:
case 90:
Console.WriteLine(...
switch식
: switch문과 다르게 어떤 계산을 해서 결과를 내놓음
① switch문에서 조건식을 switch키워드 앞으로 옮긴다
② case키워드와 :는 =>로 바꾼다
③ break;는 불필요하며 각 케이스는 콤마(,)로 구분한다
④ default는 _로 바꾸면 된다
switch문 | switch 식 |
|
|
이런식으로도 사용가능 람다랑 엮어서 사용한(분석필요..)
-> GameObject형식을 반환하는 메소드에 스위치 식을 사용해서
매개변수로 들어온 NoticeType이 Normal일 경우 게임오브젝트 NoticeNormal을 반환
람다를 사용해
switch(noticeType)
case : NoticeType.Noraml
return NoticeNormal;
break; 을 생략한것.
[SerializeField] GameObject PositionObject;
[SerializeField] GameObject NoticeNormal;
[SerializeField] GameObject NoticeWarning;
[SerializeField] GameObject NoticeDanger;
[SerializeField] GameObject NoticeCheck;
[SerializeField] GameObject NoticeSuccess;
[SerializeField] GameObject NoticeLevelUp;
[SerializeField] GameObject NoticeItem;
public GameObject NoticeObject(NoticeType noticeType) => noticeType switch
{
NoticeType.Normal => NoticeNormal,
NoticeType.Warning => NoticeWarning,
NoticeType.Danger => NoticeDanger,
NoticeType.Check => NoticeCheck,
NoticeType.Success => NoticeSuccess,
NoticeType.Item => NoticeItem,
NoticeType.LevelUp => NoticeLevelUp,
_ => NoticeNormal
};
사용하는 부분 - Instantiate의 첫번째 GameObject형식 매개변수
public void Notice(NoticeType _type, string _text, float time)
{
GameObject noticeObject = Instantiate(NoticeObject(_type), PositionObject.transform);
Notice notice = noticeObject.GetComponent<Notice>();
notice.Text = _text;
notice.Title = null;
notice.Destroytime = time;
switch (_type)//�߰��� �ʿ��� �� �߰�.
{
case NoticeType.Normal:
break;
case NoticeType.Warning:
//notice.Title = Language.Lang(237);
break;
case NoticeType.Danger:
break;
case NoticeType.Check:
notice.Title = "notice.Title"; // Language.Lang(239);
break;
case NoticeType.Success:
//notice.gameObject.transform.Find("Partice_Success").GetComponent<ParticleSystem>().Play();
break;
case NoticeType.Item:
break;
case NoticeType.LevelUp:
string[] str = _text.Split(','); //0�� ����, 1�� ���
notice.Title = "notice.Title"; // Language.Lang(586) + str[0];
notice.Text = "notice.Text"; // Language.Lang(585) + " :" + str[1];
//EffectSoundManager.instance.PlaySound("SuccessTutorial");
break;
}
notice.FirstUpdate();
}
while, do while, for, 중첩 for, foreach