인덱서 질문 입니다!

안녕하세요

인덱서 구문을 사용할려고 하는데 만약 아래와 같이 사용 할려면 어떻게 해야 하나요??

obj["test1"]["test2"].ToString()

1개의 좋아요

제 경우에는 안쪽에 클래스를 하나 더 만들어서 그 클래스도 인덱서로 구현 후에 사용했습니다.

2개의 좋아요

@김청호 님이 설명주셨던 것처럼,

obj["test1"]의 반환 인스턴스 역시 인덱서를 구현하면 됩니다.

| 아래의 예시는 편의상 인덱서 인자 유형이 int입니다.

   public T this[int i]
   {
      get { return arr[i]; }
      set { arr[i] = value; }
   }

여기서 T 유형, arr[i] 인스턴스의 클래스 역시 인덱서를 구현하면 됩니다.

참고로 인덱서 인자 "test1"와 "test2"가 연관이 있다면 인자를 두개 해서 쓰는것도 좋습니다.

아래의 코드는 예시입니다.

var c = new Coordinates2D();

Console.WriteLine(c[5, 4]);

class Coordinates2D
{
    public int this[int x, int y]
    {
        get => x + y;
    }
}
4개의 좋아요

image

두번째 배열값에서 해당처럼 int 값을 집어넣게 되는게 어떻해야할까요?

아래는 제가 Json 을 따로 클래스로 만들어서 사용할려고 테스트 중인데 어디 부분이 문제일까요?

 public class Json
    {
        private JObject JObj = null;

        public Json(string JsonData)
        {
            this.JObj = JsonConvert.DeserializeObject<JObject>(JsonData);
        }

        public string Data(string Name)
        {
            string ReturnData = "";
            try
            {
                ReturnData = this.JObj.GetValue(Name).ToString();
            }
            catch { }
            return ReturnData;
        }

        public void Load(string jsonData)
        {
            try
            {
                this.JObj = JObject.Parse(jsonData);
            }
            catch
            {
                throw;
            }
        }

        public string Data(JObject JObjectData, string Name)
        {
            string ReturnData = "";
            try
            {
                ReturnData = JObjectData.GetValue(Name).ToString();
            }
            catch { }
            return ReturnData;
        }

        public JArray DataList(string JsonData)
        {
            JArray ReturnData = new JArray();
            try
            {
                JArray JContent = JsonConvert.DeserializeObject<JArray>(JsonData);
            }
            catch { }
            return ReturnData;
        }

        //public string this[object key]
        //{
        //    get => this.Data(key.ToString());
        //    set
        //    {
        //        try
        //        {
        //            this[key.ToString()] = value;
        //        }
        //        catch
        //        {
        //            throw;
        //        }
        //    }
        //}

        public string this[string propertyName]
        {
            get => this.Data(propertyName);
            set
            {
                try
                {
                    if (!string.IsNullOrEmpty(this.Data(propertyName)))
                    {
                        this.JObj[propertyName] = value;
                    }
                    else
                    {
                        JObj.Add(propertyName, value);
                    }
                }
                catch
                {
                    throw;
                }
            }
        }
    }
1개의 좋아요