https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/tutorials/safely-cast-using-pattern-matching-is-and-as-operators

 

패턴 일치와 is 및 as 연산자를 사용하여 안전하게 캐스트하는 방법 - C#

패턴 일치 기법을 사용하여 변수를 다른 형식으로 안전하게 캐스팅하는 방법을 알아봅니다. 패턴 일치뿐만 아니라 is 및 as 연산자를 사용하여 형식을 안전하게 변환할 수 있습니다.

learn.microsoft.com

 

즉, 강제 캐스팅은 https://learn.microsoft.com/ko-kr/dotnet/api/system.invalidcastexception?view=net-8.0 될 위험성이 있으나, as 키워드를 사용한 캐스팅은 내부에서 이를 검사하여 에러를 발생시키지 않고 null을 반환하도록 되어 있음.

 

'C#' 카테고리의 다른 글

string으로 특정 변수의 데이터를 가져올때.  (0) 2016.12.01

WRITTEN BY
빨강꼬마

,

기수 정렬

C#/Tip 2019. 4. 5. 11:56

 

'C# > Tip' 카테고리의 다른 글

로그에 뜨는 경고 해제하기  (0) 2017.04.03
Image를 Base64 String으로 변환  (0) 2016.08.24
메소드 확장  (0) 2016.08.24

WRITTEN BY
빨강꼬마

,

DISABLE 간혹 코딩하다보면 선언은 되었는데, 실제 사용하지 않는 변수가 있을 경우 콘솔창에 warning이 뜨는 경우가 있다.


물론 해당 변수를 삭제하여 메모리 관리를 확실하게 할수는 있겠지만, 경우에 따라 선언을 해야 하는데 실제 사용하지 않는 경우도 있을 수 있다.


예를 들면,

스트림 처리를 사용하여 이벤트 데이터를 각 이벤트 리스너에게 전달할때, 보낸 순서대로 데이터를 읽어와야 하는데, 2개의 데이터를 보냈으나 받는쪽에서 두번째에 보낸 하나의 데이터만 사용할 경우 두개를 모두 읽어야 두번째의 데이터를 확인할 수 있다던지...

사실 이런 구조를 바꿔야 하는게 맞으나, 선언한 변수를 사용하진 않고 그냥 두어야 하는게 이 포스팅의 핵심이니 넘어가도록 하자 -.-;;;


경고를 뜨지 않게 하려면 전처리기를 사용하면 되는데, ms c# 컴파일러가 지원하는 #pragma warning 을 사용하면 이것을 무시하고 없앨수 있다.

변수를 포함하여, 함수, 클래스 모두 사용 가능하다.

(자세한 내용은 http://www.csharpstudy.com/CSharp/CSharp-preprocessor.aspx 참조..)


특정 변수위에 

#pragma warning disable 0219

로 처리해두면 하단에 있는 변수등에 대한 워닝이 비활성화된다.


뒤쪽에 있는 코드는 warning이 출력될때 CS0219와 같은 코드를 참고하여 해당 코드를 코딩해주면 된다.



* 추가.

disable과는 반대로 restore를 사용할수도 있지만 권장하지는 않는다고 한다.

http://answers.unity3d.com/questions/367829/c-variable-is-assigned-but-its-value-is-never-used.html

'C# > Tip' 카테고리의 다른 글

기수 정렬  (0) 2019.04.05
Image를 Base64 String으로 변환  (0) 2016.08.24
메소드 확장  (0) 2016.08.24

WRITTEN BY
빨강꼬마

,

가령 테이블에 아래와 같은 형태의 컬럼이 n개 있는 경우가 있다.


item_type_1 

 item_count_1

 0

 10


만약 item_type_1, item_count_1이 n개 더 있어서 item_type_2, item_count_2... 등 더 늘어나고, 늘어날때마다 


int itemType1;

int itemCount1;


과 같은 변수도 같이 늘어난다고 가정하자. (이때 각 컬럼에 할당된 데이터도 변수에 있다고 가정)


일반적으로 조건문을 활용해서 구현할수도 있겠지만, 

Reflection 기능을 이용해서 좀더 짧은 코드로 유연하게 아래처럼 구현할 수도 있다.



using System.Reflection;


public class Program

{

public int itemType1;

public int itemCount1;

.....


public int columnCount = 10;    // 위의 종류가 반복되는 숫자


static void Main(string[] args)

{

for (int i = 0; i < columnCount ; i++)

{

string key1 = string.format("itemType{0}", i+1);

string key2 = string.format("itemCount{0}", i+1);


FieldInfo _typeField1 = this.GetType().GetField(key1, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);

FieldInfo _typeField2 = this.GetType().GetField(key2, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);


int typeValue = (int)_typeField1.GetValue(this);

int itemCount = (int)_typeField2.GetValue(this);

}

}

}


이와는 반대로 변수명을 string 형태로 받아오는 것도 Reflection 기능을 이용하면 편하다.

'C#' 카테고리의 다른 글

강제 형변환 캐스팅과 as 의 차이  (0) 2024.01.12

WRITTEN BY
빨강꼬마

,
  1. static void Main(string[] args)  
  2. {  
  3.      string imagePath=@"E:\images\sample.png";  
  4.      string imgBase64String = GetBase64StringForImage(imagePath);  
  5.      Console.WriteLine(imgBase64String);  
  6. }  
  7. protected static string GetBase64StringForImage(string imgPath)  
  8. {  
  9.       byte[] imageBytes = System.IO.File.ReadAllBytes(imgPath);  
  10.       string base64String = Convert.ToBase64String(imageBytes);  
  11.       return base64String;  
  12. }  



원문 : http://www.c-sharpcorner.com/Blogs/get-base64-string-from-image-in-c-sharp

'C# > Tip' 카테고리의 다른 글

기수 정렬  (0) 2019.04.05
로그에 뜨는 경고 해제하기  (0) 2017.04.03
메소드 확장  (0) 2016.08.24

WRITTEN BY
빨강꼬마

,

메소드 확장

C#/Tip 2016. 8. 24. 10:47

http://www.c-sharpcorner.com/Blogs/extension-methods-in-c-sharp


ToString() 처럼 호출방식을 간단하게 처리할 수 있음.

자주 호출되는 로직에 적용 가능

'C# > Tip' 카테고리의 다른 글

기수 정렬  (0) 2019.04.05
로그에 뜨는 경고 해제하기  (0) 2017.04.03
Image를 Base64 String으로 변환  (0) 2016.08.24

WRITTEN BY
빨강꼬마

,