2012-11-21 11 views
7

Я вхожу в непосредственное окно в Visual Studio. Есть переменная p. Как я могу определить тип переменной p?Как определить тип переменной? (не тип объекта)

Я пробовал p.GetType(), но это возвращает тип объектp. В моем случае это очень специфический тип (например, иногда ChessPlayer, иногда TennisPlayer). Я хотел бы узнать тип переменной, т. Е. тип, который определяет, какие методы доступны для переменной p.


Редактировать: Я думаю, что это разумная вещь, которую нужно делать. Я пытаюсь проверить переменную p, но я не знаю, что это! Обычно в Visual Studio я просто наводил указатель мыши на переменную и указывал мне ее тип, или я набираю ., а автозаполнение перечисляет его методы. Однако ни одно из этого не работает в ближайшем окне, все у меня есть эта переменная p я не знаю, что это такое и что я могу с ним делать :(

+0

Вы пробовали 'p.GetType(). GetMethods()'? 'P.GetType(). GetInterfaces()'? – J0HN

+2

Хотя мне любопытно, есть ли способ сделать это, я бы не удивился, если бы не было. Если вы находитесь в отладчике с дескриптором на 'p', вы можете _see объявление_' '' в коде и, таким образом, посмотреть, каков его тип переменной. – Rawling

+3

Просто, чтобы уточнить, когда вы делаете 'BoardGamePlayer p = new ChessPlayer();', то, что вы хотите, это способ узнать, что 'p' был объявлен как« BoardGamePlayer »? –

ответ

3

Удивление это было так сложно, в конце концов я написал этот метод, который, кажется, дает правильный ответ. Использование

public static class Extensions 
{ 
    public static Type GetVariableType<T>(this T instance) 
    { 
     return typeof(T); 
    } 
} 

Пример:

void Main() 
{ 
    IList x = new List<int>{}; 
    x.GetVariableType().Dump(); 
} 

Печать System.Collections.IList

0
System.Object.GetType() 

Это возвратит вас тип переменной потому что этот класс в верхней части иерархии, от которого происходит каждый класс.

вы также можете проверить TYPEOF функции, чтобы получить точный тип данного экземпляра.

+1

OP говорит, что он опробован 'GetType'. Он хочет тип типа компиляции 'p', а не тип времени выполнения. – Rawling

+0

хорошо, тогда typeof будет возможным решением для этого. –

5

C# предоставляет множество способов для этого :)

Для точной копии определенного типа вам нужно сделать, это

if (p.GetType() == typeof(YourDesiredType)) 

Если вы хотите знать, является ли р экземпляр yourdesiredtype затем

if (p is YourDesiredType) 

или вы можете попробовать это

YourDesiredType ydp = p as YourDesiredType; 

Как и в этом случае (поскольку я не уверен, что это возможно в вашем сценарии), когда OP хочет знать тип компиляции. Тогда я wo пакетирования только рекомендуют использовать общий список для этого

Потому что, сохраняя типобезопасен список, каждый может легко следить за его типа

+1

Все это проверяет тип выполнения. OP интересуется типом времени компиляции. – Rawling

+0

Он просто очистил это. Я думаю, что не было необходимости в голосах :(кто-то сделал – Freak

0

Я думаю, что вам может понадобиться это

if (p is ChessPlayer) 
{ 
    ChessPlayer cp = (ChessPlayer)p; 

    //Use ChessPlayer methods 
} 
1

В качестве альтернативы использованию сразу же окно, если вы хотите видеть только тип переменной, вы можете просто добавить переменную посмотреть и проверить тип в окне часов.

Смежные вопросы