안녕하세요
인덱서 구문을 사용할려고 하는데 만약 아래와 같이 사용 할려면 어떻게 해야 하나요??
obj["test1"]["test2"].ToString()
안녕하세요
인덱서 구문을 사용할려고 하는데 만약 아래와 같이 사용 할려면 어떻게 해야 하나요??
obj["test1"]["test2"].ToString()
제 경우에는 안쪽에 클래스를 하나 더 만들어서 그 클래스도 인덱서로 구현 후에 사용했습니다.
@김청호 님이 설명주셨던 것처럼,
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;
}
}
두번째 배열값에서 해당처럼 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;
}
}
}
}