C# 클래스 멤버 변수 중 배열과 리스트 와 같은 변수에 프로퍼티(get set) 을 사용할 수 있나요?

안녕하세요 c# 초보 입니다.
클래스 멤버 변수 중 int 나 string 과 같은 변수들은 프로퍼티(get set) 을 사용할 수 있는데 배열과 리스트 변수에는 안되더군요 .
혹시 방법이 있는지 질문 드립니다.
감사합니다.

2 Likes

안녕하세요. 말씀하신 "사용이 불가한 상황"은 컴파일 오류가 발생하는 코드가 있기 때문일 것 같은데요, 컴파일에 실패하는 코드를 이곳에 붙여주셔야 정확한 토론이 가능할 것 같습니다.

4 Likes

안되지 않는데요? ^^; 안되었던 코드를 공유해주시면 도움 드릴 수 있을 것 같아요.

4 Likes

맥락을 보니 느낌상으로… 변수 선언만 하셨지 객체 생성 안하고 사용하다가 폭죽놀이 당하셨을듯…싶네요 ㅎㅎㅎ

2 Likes
private static IntPtr[] _testArray1 = new IntPtr[10];
        private static IntPtr[] _testArray2 = new IntPtr[10];
        public static IntPtr this[int index]
        {
            get
            {
                return _testArray1[index];
            }
            set
            {
                _testArray1[index] = value;
            }
        }
        public static IntPtr this[int index]
        {
            get
            {
                return _testArray2[index];
            }
            set
            {
                _testArray2[index] = value;
            }
        }

이런 식으로 사용은 안되더군요. 다른 방법이 있나요?

2 Likes
private static IntPtr[] _testArray1 = new IntPtr[10];
        private static IntPtr[] _testArray2 = new IntPtr[10];
        public static IntPtr this[int index]
        {
            get
            {
                return _testArray1[index];
            }
            set
            {
                _testArray1[index] = value;
            }
        }
        public static IntPtr this[int index]
        {
            get
            {
                return _testArray2[index];
            }
            set
            {
                _testArray2[index] = value;
            }
        }
``` 이런 식으로 가능하지 않을까? 라고 생각했습니다..물론 이상한 내용이지만 혹시 다른 방법이 있을까요? 배열말고 리스트는 어떤식으로 가능할까요?
1 Like

C#에서는 정적 인덱서가 지원안될겁니다!

2 Likes
Test.TestArray1[0] = 10;
Console.WriteLine(Test.TestArray1[0]);

class Test
{
    public static IntPtr[] TestArray1 { get; } = new IntPtr[10];
    public static IntPtr[] TestArray2 { get; } = new IntPtr[10];
}

이런식으로 사용하시면 됩니다.

2 Likes

답변 감사합니다. 결국 메서드를 사용해야한다는 이야기 이군요.

1 Like

답변 감사합니다.
오류가 발생하는건 버전 문제일까요?
사용하고 있는 VS 는 2012 .NET 4.5 입니다.

1 Like

.NET 4.5로 확인할 수 있는 환경은 아니라서요… .NET 4.6에서는 다음의 코드로 테스트할 수 있습니다.

using System;

namespace ConsoleApp141
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Test.TestArray1[0] = (IntPtr)10;
            Console.WriteLine(Test.TestArray1[0]);
        }
    }

    class Test
    {
        public static IntPtr[] TestArray1 { get; } = new IntPtr[10];
        public static IntPtr[] TestArray2 { get; } = new IntPtr[10];
    }
}
1 Like

오류가 발생했을 때 어디서 어떤 오류가 발생하는지도 공유해주시면 더 정확한 답변이 가능합니다.

1 Like


오류 메시지는 위와 같이 출력됩니다.
image
코드는 알려주신 내용 그대로 사용하였습니다.

1 Like

안되면 이렇게 해보세요.

image

1 Like

위에도 안되면 이렇게 해보세요.

image

1 Like

답변 감사합니다. 궁금증이 해결되었습니다. 화살표는 안되고 return 을 사용해야 되네요…^^;;;;
어쩌면 메서드로 Getter Setter 하는게 더 마음 편할지도??? ㅎㅎㅎㅎ
새로운 지식을 알려주셔서 감사합니다. !!

1 Like

VS 2012가 C# 5.0까지만 지원해줘서 속성 람다(화살표)가 안되나 보네요.

1 Like