2015-07-16 4 views
0

Как сохранить Type в строковом формате?Как сохранить тип в строковом формате

public class cat 
{ 
    public int i = 1; 
    public func() 
    { 
     Console.WriteLine("I am a cat"); 
    } 

} 

// ... 

Type obj_type = typeof(cat); 
string arg2; 

arg2 = obj_type.ToString(); /* error*/ 
arg2 = (string)obj_type;/*same error*/ 
arg2 = obj_type.Name; /*same error*/ 

Console.WriteLine(obj_type); /*ok*/ " temp.cat " 

Я получаю эту ошибку в строке выше:

Не удается неявно преобразовать тип «строка» в «» System.Type

+4

Это не ошибка. Это компилируется и запускается. – cubrr

+2

Линия, помеченная как ошибка, определенно не дает ошибки. Вероятно, вы передаете строку методу, ожидающему тип. – Rob

+0

Если функция ожидает 'Type', вы не можете просто передать ее' string', для этого нет никакой магии. – michalk

ответ

1

Если вам нужно полное имя типа Пробуйте следующее:

arg2 = obj_type.AssemblyQualifiedName;

1

Вы можете получить тип экземпляра объекта:

string typeName = obj.GetType().Name; 

MSDN ссылка на GetType метод: https://msdn.microsoft.com/en-us/library/system.object.gettype(v=vs.110).aspx

И в случае, если вы хотите, чтобы получить имя типа, просто класс:

private static void ShowTypeInfo(Type t) 
{ 
    Console.WriteLine("Name: {0}", t.Name); 
    Console.WriteLine("Full Name: {0}", t.FullName); 
    Console.WriteLine("ToString: {0}", t.ToString()); 
    Console.WriteLine("Assembly Qualified Name: {0}", 
         t.AssemblyQualifiedName); 
    Console.WriteLine(); 
} 
+0

спасибо, что это сработало –

0

это работает штраф, только что проверил его:

Type obj_type = typeof(cat); 
string arg2 = obj_type.ToString(); 
// arg2 = obj_type.Name; it works too and it gives short name without namespaces 
Console.WriteLine(arg2); 

Выход: Test1.cat // полное имя

P.S.

arg2 = (string)obj_type; 

Здесь вы пытаетесь явно наложить тип на строку. Это похоже на то, что вы говорите: «Эй, я на 100% уверен, что Type может быть легко преобразован в строку, поэтому просто сделайте это». Он не работает, потому что между ними нет простого преобразования, и компилятор не знает, как его обрабатывать.

0

типof принимает тип не его экземпляр.

См. Это.

public class cat 
{ 
    public int i = 1; 
    public void func() 
    { 
     Console.WriteLine("I am a cat"); 
    } 
} 

Type type = typeof(cat);// typeof accept a Type not its instance 
string typeName = type.Name;// cat 
Смежные вопросы