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

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

2개의 좋아요

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

4개의 좋아요

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

4개의 좋아요

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

2개의 좋아요
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개의 좋아요
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개의 좋아요

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

2개의 좋아요
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개의 좋아요

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

1개의 좋아요

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

1개의 좋아요

.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개의 좋아요

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

1개의 좋아요


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

1개의 좋아요

안되면 이렇게 해보세요.

image

1개의 좋아요

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

image

1개의 좋아요

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

1개의 좋아요

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

1개의 좋아요