2017년 5월 31일 수요일
2017년 5월 17일 수요일
[c#] c#7 pattern Matching
object temp = 4;
if(temp is string t)
{}
=> 먼저 (string)temp = t 라고 캐스팅한다.
이게 성공시 if문장 안은 데이터 타입이 string 인 t 라는 변수가 로컬 변수가 된다.
실패시 if 문 안으로 안들어 간다.
2017년 5월 16일 화요일
[c#} Lazy
1. if문에서 ||(OR) 은 Lazy가 아닌데, &&(AND)는 Lazy이다. 즉
AND는 처음 문장실행후 판별=> 다음 문장
OR은 각 문장 다 실행 => 각각 판별
이렇게 동작한다.
따라서 And가 무조건 성능상 좋다.
AND는 처음 문장실행후 판별=> 다음 문장
OR은 각 문장 다 실행 => 각각 판별
이렇게 동작한다.
따라서 And가 무조건 성능상 좋다.
[c#] Enumerator
IEnumerable 을 구현
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
IEnumerator를 상속받는 GetEnumerator 를 구현을 한다.
IEnumerator를 상속받는 GetEnumerator
는 currnet 라는 오브젝트를 리턴하고, 다음에 MoveNext실행 다시 current라는 오브젝틀르 리턴하는 식으로 구동하게 된다.
여기서 MoveNext는 bool을 리턴하고, True리턴시 currnet를 반환, Fals 리턴시 Dispose라는 메소드로 가서 더이상 반환을 안하게 된다.
public class FibonacciNumbers : IEnumerable
{
public IEnumerator GetEnumerator()
{
return new FibEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class FibEnumerator : IEnumerator
{
public FibEnumerator()
{
Reset();
}
public Int64 Current { get; private set; }
Int64 Last { get; set; }
object IEnumerator.Current { get { return Current; } }
public void Dispose()
{ Console.WriteLine("Enumerator is over"); }
public bool MoveNext()
{
if(Current == -1)
{
Current = 0;
}
else if(Current == 0)
{
Current = 1;
}
else if(Current == 5) return false;
else
{
Int64 next = Current + Last;
Last = Current;
Current = next;
}
return true;
}
public void Reset()
{
Current = -1;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
IEnumerator를 상속받는 GetEnumerator 를 구현을 한다.
IEnumerator를 상속받는 GetEnumerator
는 currnet 라는 오브젝트를 리턴하고, 다음에 MoveNext실행 다시 current라는 오브젝틀르 리턴하는 식으로 구동하게 된다.
여기서 MoveNext는 bool을 리턴하고, True리턴시 currnet를 반환, Fals 리턴시 Dispose라는 메소드로 가서 더이상 반환을 안하게 된다.
public class FibonacciNumbers : IEnumerable
{
public IEnumerator
{
return new FibEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class FibEnumerator : IEnumerator
{
public FibEnumerator()
{
Reset();
}
public Int64 Current { get; private set; }
Int64 Last { get; set; }
object IEnumerator.Current { get { return Current; } }
public void Dispose()
{ Console.WriteLine("Enumerator is over"); }
public bool MoveNext()
{
if(Current == -1)
{
Current = 0;
}
else if(Current == 0)
{
Current = 1;
}
else if(Current == 5) return false;
else
{
Int64 next = Current + Last;
Last = Current;
Current = next;
}
return true;
}
public void Reset()
{
Current = -1;
}
2017년 5월 15일 월요일
피드 구독하기:
글 (Atom)