2011-07-14 3 views
16

pewnie chcą zbyt wiele, ale mój scenariusz jestDodaj do własności dynamicznych obiektów .NET

public dynamic CreateConfigObject(JobConfigurationModel config) { 
    dynamic configObject = new { }; 

    configObject.Git = new GitCheckout { 
     Repository = config.Github.Url 
    }; 

    return configObject; 
} 

Oczywiście, to nie na configObject.Git ponieważ ta właściwość nie istnieje. Chcę móc dodawać dowolną liczbę właściwości w czasie wykonywania, bez uprzedniej znajomości liczby i nazw właściwości;

Czy taki przypadek jest możliwy w języku C#, czy moja zła wyobraźnia JavaScript zaczyna mnie ranić? :)

+0

możliwe duplikat [? Jak mogę utworzyć właściwości dynamicznych w C#] (http://stackoverflow.com/questions/947241/how-do-i-create-dynamic-properties-in-c) – nawfal

Odpowiedz

34

dynamic umożliwia luźno wpisany dostęp do obiektów mocno wpisanych.

Należy użyć klasy ExpandoObject, który pozwala swobodnie wpisany dostęp do wewnętrznego słownika:

dynamic configObject = new ExpandoObject(); 

configObject.Git = new GitCheckout { 
    Repository = config.Github.Url 
}; 
+0

Po prostu niesamowity :) –

+2

ExpandoObject, teraz mój ulubiony obiekt .NET :) –

+11

Nie nadużywaj 'ExpandoObject'. Nie należy rezygnować z bezpieczeństwa w trybie kompilacji, chyba że naprawdę tego potrzebujesz. – SLaks