Chcę uzyskać System.Type
dali string
określająca (pierwotne) RODZAJ za C# przyjazną nazwę zasadniczo drogę kompilator C# robi podczas odczytu kodu źródłowego C#.Convert „C# przyjazny typu” nazwa do rzeczywistego typu: „int” => typeof (int)
Uważam, że najlepszym sposobem na opisanie tego, co robię, jest test jednostkowy.
Mam nadzieję, że istnieje ogólna technika, która może sprawić, że spełnią się wszystkie poniższe twierdzenia, zamiast próbować kodowania specjalnych przypadków dla specjalnych nazw C#.
Type GetFriendlyType(string typeName){ ...??... }
void Test(){
// using fluent assertions
GetFriendlyType("bool").Should().Be(typeof(bool));
GetFriendlyType("int").Should().Be(typeof(int));
// ok, technically not a primitive type... (rolls eyes)
GetFriendlyType("string").Should().Be(typeof(string));
// fine, I give up!
// I want all C# type-aliases to work, not just for primitives
GetFriendlyType("void").Should().Be(typeof(void));
GetFriendlyType("decimal").Should().Be(typeof(decimal));
//Bonus points: get type of fully-specified CLR types
GetFriendlyName("System.Activator").Should().Be(typeof(System.Activator));
//Hi, Eric Lippert!
// Not Eric? https://stackoverflow.com/a/4369889/11545
GetFriendlyName("int[]").Should().Be(typeof(int[]));
GetFriendlyName("int[,]").Should().Be(typeof(int[,]));
//beating a dead horse
GetFriendlyName("int[,][,][][,][][]").Should().Be(typeof(int[,][,][][,][][]));
}
Co próbowałem dotąd:
To pytanie jest uzupełnieniem an older question of mine pytaniem, jak uzyskać „przyjazną nazwę” od typu.
Odpowiedź na to pytanie brzmi: używaj CSharpCodeProvider
using (var provider = new CSharpCodeProvider())
{
var typeRef = new CodeTypeReference(typeof(int));
string friendlyName = provider.GetTypeOutput(typeRef);
}
nie mogę dowiedzieć się, jak (lub jeśli to możliwe), aby zrobić to w drugą stronę i uzyskać rzeczywisty typ C# od CodeTypeReference
(IT posiada również konstruktor, że trwa string
)
var typeRef = new CodeTypeReference(typeof(int));
_ "Oto unit-test" _ - Więc, chcesz nas napisać implementacja? Pokaż, co próbujesz. – CodeCaster
To był najprostszy i najprostszy sposób opisania, o co mi chodzi. Nie próbujesz być mądrym dupkiem ani czymkolwiek. Myślałem, że inni programiści to docenią. –
Nie o to chodzi. Opisujesz tylko to, czego chcesz, a nie to, czego próbujesz. Jeśli chcesz otrzymać kod, zadzwoń do programisty i zapłać go. Tutaj masz pokazać wysiłek badawczy. @aquaraga Nie pytam o to, o co pyta, ponieważ samo to jest całkiem jasne. – CodeCaster