I have the task to build a collection of data inside of c#.

Each data set has these attributes:

* Type
* Name (ShortDescription)
* ServiceString
* HTTPMethod

The attributes "Type" and "Name" have a known and fixed set of values.

**Example Data:**

```
Type: User
    -> Name: Get_Users_List
    -> Name: Add_User
    -> Name: Enable_User
    -> Name: Disable_User
Type: Rights
    -> Name: Get_Rights_List
    -> Name: Approve_User_Right

```

... and so on.

To minimize coding errors and because the list of entries is known and fixed I have created several enum's for the "Type"s and "Name"s.

**Example Data:**

```
enumTypes
enumUserFunctions
enumRightFunctions

```

...and so on.

I also know how the data should be accessed inside the code:

```
SomeCollection[enumType.User][enumUserFunctions.Add_User].ServiceString
SomeCollection[enumType.User][enumRightFunctions.Approve_User_Right].HTTPMethod

```

I'm trying to use nested dictionaries to achieve this goal, but I facing the problem that the nested dictionary is has a different type depending on the Dataset-Type I'm trying to store.

```
Dictionary<enumTypes, Dictionary<variableEnum, AutoPropertyWithValues>>

```

How do I comfortably achieve the goal I have?

---

**Edit**

The root cause is that I have some objects I need to use several times in my code, and I want to implement a intuitive way to navigate to them. This is what I is what I have made from my root idea after Sinatr's suggestion.

```
public class FunctionCollection
{
    public UserFunctions UserFunctions { get; } = new UserFunctions();
    public BaseDataFunctions BaseDataFunctions { get; } = new BaseDataFunctions();
    /* ... and so on ... */
}
public class UserFunctions
{
    public RestFunction Do_User_Login { get; set; } = new RestFunction();
    public RestFunction Do_User_Logout { get; set; } = new RestFunction();
    /* ... */
}
public class BaseDataFunctions
{
    public RestFunction Get_Product_List { get; set; } = new RestFunction();
    /* ... */
}
public class RestFunction
{
    public string ServiceUriString { get; set; }
    public HttpVerbs Method { get; set; }
    /* ... and so on ... */
}

```

Just one last question.
Is there a way to set the objects directly in the definition?
For Example setting ServiceUriString and HTTPMethod in the definition of Do\_User\_Login:

```
public RestFunction Do_User_Login { get; set; } = new RestFunction();

```