가끔 같은 유형의 객체가 여러 개를 만들어서 한번에 관리하고 싶을 때가 있는데,
예를 들어 Icon00 / Icon01 / Icon02 가 있는데, 유동적으로 변수가 00 / 01 / 02로 변하여 이 변수를 이용하여
객체에 접근하고 싶을 때가 있다.
직관적으로 생각하면 "Icon" + number 라고 해서 객체 이름을 조합할 수 있지 않을까? 라는 생각을 하게 되지만 이는 불가능하며, 우회해서 구현은 가능하지만 여러 이유로 나쁜 코드임.
하지만 관점을 바꾸면 의외로 간단한데 List<T> 를 사용하면 됨.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
private List<Image> Images = new List<Image>();
private void InitLabels()
{
Images.Add(icon00);
Images.Add(icon01);
Images.Add(icon02);
}
private void Load_Icon()
{
for (int i = 0; i < number; i++)
{
Images[i].Source = new BitmapImage(new Uri(@"\Resources\icon.png", UriKind.RelativeOrAbsolute));
}
}
|
cs |
- WPF의 Image 컴포넌트를 예시로 함.
- List의 형식을 Dynamic으로 해도 되지만, 문법체크가 되지 않으니 정확한 자료형 명시를 필자는 선호함.
- List 는 Add 하여 넣은 원본 객체를 변형하지 못하므로, 이 방식은 잘못됬다?
실제로 다음과 같이 코드를 작성 할 경우 결과는 다음과 같음.
12345678910111213 public static void Main(){string number = "1";List<string> numbers = new List<string>();numbers.Add(i);numbers[0] = "2";WriteLine(numbers[0]); // 2WriteLine(number); // 1}cs 하지만 일반 자료형식이 아니라 WPF의 컴포넌트들 ( Image, Label, TextBox ...) 들의 경우 위의 내용대로 리스트를 활용하면 제대로 변경이 됨.
정확한 원리를 아는 것이 아닌, 직접 실험해본 내용이라 자세한 이유는 필자도 모름.
'Csharp' 카테고리의 다른 글
WPF - 파일 탐색기 (0) | 2019.08.05 |
---|---|
C# - 코딩할 때 도움되는 자잘한 문법들 (2) | 2019.08.05 |
C# - 자료형들의 기본값 (0) | 2019.07.22 |
C# - 외부 프로그램과 링크 실행, 종료 (0) | 2019.07.22 |
WPF - 다른 파일에서 Window.xaml.cs 코드 접근 (0) | 2019.07.22 |