2017-08-04 14 views

回答

2

簡短回答:沒有。

龍答:

最近的C#相當於是Dictionary

您可以使用它像這樣:

var myDict = new Dictionary<string, int>(); 

// Adding values 
myDict.Add("foo", 3); 
myDict["bar"] = 8; // Alternative syntax 

// Getting values 
int bar = myDict["bar"]; 
bool fooExists = myDict.ContainsKey("foo"); // true 

// Safe get 
int foo; 
bool ableToGetFoo = myDict.TryGetValue("foo", out foo); 

// Splitting 
var allKeys = myDict.Keys; 
var allValues = myDict.Values; 

然而,這不會對你工作。至少,不是以任何直接的方式。

你必須認識到C#是一種強類型語言。這意味着與所有其他集合一樣,C#的字典也有一個限制:所有元素必須是相同的類型。這意味着所有的鍵必須是相同的類型,並且所有的值也必須是彼此相同的類型。這就是類型化語言的強大功能。

如果您想在C#中重新創建您的示例,您必須定義一個自定義數據結構以適應它。然而,在你的例子中出現的所有嵌套都會使這個具有挑戰性。它的一些元素,比如這個特定的位:

["e","f",{"g"=>1}] 

..絕對不可能。數組或列表不能有完全不同類型的元素。

這是我創造類似的例子一些嘗試:

var x = new Dictionary<string, Dictionary<string, List<string>>>() 
{ 
    { 
     "a", new Dictionary<string, List<string>>() 
     { 
      {"b", ["c"]}, 
      {"d", ["e", "f", "g"]} 
     } 
    }, 
}; 

編輯:爲了使用JSON工作你需要採取基於類的方法。這將是這個樣子:

public class A 
{ 
    public string b { get; set; } 
    public List<object> d { get; set; } 
} 

public class RootObject 
{ 
    public A a { get; set; } 
} 

以及相應的JSON(從你的例子直接翻譯):

{ 
    "a": { 
     "b":"c", 
     "d":["e", "f", {"g":1}] 
    } 
} 
+0

感謝,是的,我想知道它怎麼可能創建這樣的哈希值。在C#中,這種類似的東西不可能以更直接的方式實現,因爲JSON的格式類似於混合數據類型。如果你使用C#將精確的散列輸出到json,你會怎麼做? –

+0

@BA檢查編輯。這將*工作*,但是你不應該使用C#。您的最佳行動方案是重新分析您的數據,或者堅持使用動態語言,以適應現實。 – stybl