Linq를 이용해서 특정타입만 필터링해서 가지고 오고 싶을경우가 있습니다. 이때 Where조건을 쓰는 방법도 있지만, 저는 주로 ofType을 사용합니다.
Cast를 이용해 강제 형변환시키면 되지 않나?
- 이 경우는 내가 타입을 알고 있어서, 그 타입을 사용하겠다 사용할때만 사용이 가능합니다.
- Cast<특정타입> 에서 이 특정타입에 맞지 않은 값이 오게되면, Error가 발생 합니다.
Cast < TResult >
public void Run()
{
object[] obj = new object[] { (string)"양뱅", (int)33, (string)"동목", (string)"다방" };
//object Array를 string 타입으로 Casting 을
obj.Cast<string>()
.Select(f => f)
.ToList()
.ForEach(f => Console.WriteLine(f));
}
결과
Where조건을 사용
- Where조건을 이용해서, 해당 값의 GetType과 typeof를 이용해서 string 타입만을 필터링을 합니다.
public void Run()
{
object[] obj = new object[] { (string)"양뱅", (int)33, (string)"동목", (string)"다방" };
//만약 내가 Linq에서 String 타입만 가지고 오고 싶을경우 Where을 사용한다면?
obj.Where(f=> f.GetType().Equals(typeof(string)))
.Select(f => f)
.ToList()
.ForEach(f => Console.WriteLine(f));
}
OfType< TResult >
- ofType<특정타입> 일 경우, 특정 타입에 해당하는 값만 가지고 옵니다. 그래서 저는 주로 ofType을 사용합니다.
public void Run()
{
object[] obj = new object[] { (string)"양뱅", (int)33, (string)"동목", (string)"다방" };
//만약 내가 Linq로 String 타입만 가지고 오고 싶을경우 ofTyps<string>을 사용한다.
obj.OfType<string>()
.Select(f => f)
.ToList()
.ForEach(f => Console.WriteLine(f));
}
결과
양뱅
동목
다방