2013-02-14 5 views
1

Я хочу быть уверенным, что переменная параметра имеет тип Guid.зная тип переменной во время выполнения

public ActionResult Edit(Guid id) 
{ 
    // if id != Guid print error 
} 

У меня довольно простой вопрос, но я застрял здесь.

Thanks

+2

Что еще это может быть? Если кто-то попытался передать что-то в другом, кроме «Гида», он не будет компилироваться. –

+0

Не могли бы вы немного объяснить, что вы подразумеваете под 'id! = Guid' - вы говорите о _type_ или конкретных значениях? – Oded

+0

@DStanley - В этом случае. Но с непечатанным ссылочным типом вы можете передать подтип. – Oded

ответ

4

В этом случае нет никаких шансов, что переданное значение равно не GUID.

GUID structure - тип значения - он не может быть унаследован. Это означает, что только тип, который компилятор примет в качестве аргумента для этого метода, равен GUID.

2

Это всегда будет. Компилятор обеспечивает это.

Запись параметра Guid id означает, что к методу может быть передан только экземпляр типа Guid или подтип Guid. Любая попытка передать параметр любого другого типа приведет либо к ошибке компилятора, либо к исключению во время выполнения (если вы попытались вызвать метод посредством отражения).

Как указывали другие, Guid является struct и не может иметь подтипы.

0

Как уже отмечалось, в этом конкретном сценарии не обязательно, потому что компилятор обеспечит его.

Однако, в общем, вы бы хотели использовать GetType() и typeof для этой проверки.

if (id.GetType() != typeof(System.Guid)) 
{ 
    // Print Error 
} 
Смежные вопросы