Hello!

Here is the code:

array( "Param1" => "lastname", "Param2" => array( "Param21" => "name1", "Param22" => "name2", ) ) 

Question:

What will it look like in C #? Prompt analogue of this operator "=>".

    2 answers 2

    The exact analogue of the operator => in this context is {key, value} when using the Collection Initializer mechanism:

     var arr = new Dictionary<string, object> { { "Param1", "lastname" }, { "Param2", new Dictionary<string, object> { { "Param21", "name1" }, { "Param22", "name2" } } } }; 

    Collection Initializer uses duck typing - i.e. it does not require that Dictionary<K, V> initialized with it. Instead, it simply checks that the object being initialized is IEnumerable , and that it has an Add method with two parameters.

    The php example tries to mix strings and other arrays in one array, so that in C # the equivalent code will not have strong typing either.

      I did not work with PHP, but a quick overview of the answers showed that the => operator in PHP is used to create and extract information from associative arrays. The equivalent in C # can be a Dictionary .

      But the example you cited will not work 1 translate directly into C #, since, according to the documentation , any type of object can be used as a value in PHP. Therefore, in order to translate this code to C #, you need to define a common type for representing values ​​in a dictionary.

      Suppose you implement a kind of JSON representation. Then your code might look like this:

       var data = new Dictionary<JsonString, JsonNode> { {new JsonString("Param1"), new JsonString("lastName")}, { new JsonString("Param2"), new JsonObject(new Dictionary<JsonString, JsonNode> { {new JsonString("Param21"), new JsonString("name1")}, {new JsonString("Param22"), new JsonString("name2")} }) } }; 

      Provided that you have defined a class hierarchy where JsonNode acts as the base JsonString , and JsonString and JsonObject are inherited from it.


      1: Technically, this is possible if you declare object or dynamic as the value type, but note that this can lead to a performance hit and poorly maintained code.