でToStringメソッドのオーバーライド)この関数を使用して私に価値を与えていない。は、私は次のコードを持っているメインでカスタムデータ型
public override string ToString()
{
return Value.ToString();
}
アドバイスをいただければ幸いです。
でToStringメソッドのオーバーライド)この関数を使用して私に価値を与えていない。は、私は次のコードを持っているメインでカスタムデータ型
public override string ToString()
{
return Value.ToString();
}
アドバイスをいただければ幸いです。
あなたはJValue.ToString()
が、それは、クラスの完全な名前を表示するように上書きされていないJsonValue.ToString()
メソッドを呼び出すためJsonValue
から派生した各クラスでToString()
メソッドをオーバーライドする必要があります。
また、パブリックフィールドをpublic auto-propertiesに置き換えることをお勧めします。例えばので
:
internal class JsonBool : JsonValue
{
public bool Value { get; set; }
public string override ToString()
{
return Value.ToString();
}
}
UPDATE#1:
あなたはToStringメソッド()のオーバーライドのトンを避けることができるよう、より良い解決策は、ジェネリック型を導入することであろう。
internal class JsonValue<T>
{
public T Value { get; set; }
public override string ToString()
{
return Value.ToString();
}
}
internal class JsonBool : JsonValue<bool>
{
}
internal class JsonDouble : JsonValue<double>
{
}
ガボールの答えはあなたがJsonValue
派生したオブジェクトのToString
を上書きする必要があること、正確です。ジェネリックについての彼の他のアドバイスや、フィールドをプロパティに置き換えることも良いです。
配列とオブジェクト型については、それらの型に含まれる値をループする必要があります。あなたは、あなたがそれが望むように出力を出すために、コードを使いこなす必要があるかもしれません。
以下のコードでは、ネストされたアイテムは考慮されていません。たとえば、JsonObject
がJValue
()の場合は、(JsonObject
)の値を保持しています。
internal class JsonArray : JsonValue
{
public List<JValue> Values;
public override string ToString()
{
return string.Join(", ", Values ?? Enumerable.Empty<JValue>());
}
}
internal class JsonObject : JsonValue
{
public Dictionary<string, JValue> Values;
public override string ToString()
{
if (Values == null || Values.Count <= 0)
{
return "";
}
var builder = new StringBuilder();
foreach (var item in Values)
{
builder
.AppendFormat("{0}: {1}", item.Key, item.Value)
.AppendLine();
}
return builder.ToString();
}
}
見たい出力は? –
私は値自体を出力しようとしています。 – Tommizzy