2015-09-14 7 views
0

Что происходит за кулисами, когда вы делаете что-то вроде:Как работают ограничения параметров?

private static void AssertIsNotNull<T>(T x) where T : class{} 

Можно ли получить тот же эффект, используя что-то из пространства имен Win32?

Причина, по которой я спрашиваю, это интересно узнать, можете ли вы ограничить параметр в C# 1.0.

+4

Дженерики (и, следовательно, общие ограничения) являются функцией времени компиляции. Вы не можете ограничить общий параметр в C# 1.0, потому что у C# 1.0 вообще нет дженериков. И они не имеют ничего общего с Win32. Что именно вы хотите сделать? – Blorgbeard

+2

Они не являются ** параметрами ** ограничений - это ** общие ** ограничения. – Enigmativity

+1

Если вам нужно имя для этих вещей, вы можете использовать «typenames» - это то, что они вызывают на C++. – Blindy

ответ

2

Чтобы проверить, если тип является ссылочным типом или тип значения, без дженериков (которые доступны только с C# 2), вы можете использовать

if (typeof(MyType).IsValueType) 

или если у вас есть OBJ объекта:

if (obj.GetType().IsValueType) 
Смежные вопросы