안녕하세요 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개의 좋아요
안되면 이렇게 해보세요.
1개의 좋아요
위에도 안되면 이렇게 해보세요.
1개의 좋아요
답변 감사합니다. 궁금증이 해결되었습니다. 화살표는 안되고 return 을 사용해야 되네요…^^;;;;
어쩌면 메서드로 Getter Setter 하는게 더 마음 편할지도??? ㅎㅎㅎㅎ
새로운 지식을 알려주셔서 감사합니다. !!
1개의 좋아요
VS 2012가 C# 5.0까지만 지원해줘서 속성 람다(화살표)가 안되나 보네요.
1개의 좋아요