2016-06-10 1 views
0

У меня есть функция делегата:Передача класса в качестве параметра для использования с TYPEOF()

myDelegate md = cls => String.Format("blahblah: {0}", typeof(cls).FullName)); 

Я хочу передать Class там в качестве параметра cls, который будет использоваться в typeof().

Пример использования:

md(System.String); // => blahblah: System.string 

Какой тип определить для входного параметра cls, чтобы иметь возможность прохождения любого Class в моей функции?

+0

можно передать 'Тип cls' – Mairaj

+1

Если вы готовы перейти к прохождения * type *, это довольно просто - но 'typeof' нужно будет использовать на сайте вызова, а не в методе. В противном случае, я думаю, вы застряли. –

+1

'typeof (cls)' может быть заменен на 'cls.GetType()', который бы скомпилировал ваш код и напечатал тип 'cls', как вам кажется. Я действительно не понимаю, что именно вы пытаетесь достичь, поэтому не уверен, что это соответствует вашей ситуации. –

ответ

2

Типа вы ищете Type.

Используйте это так:

myDelegate md = cls => String.Format("blahblah: {0}", cls.FullName)); 
md(typeof(System.String)); 

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

public static string TypePrinter<T>() 
{ 
    return String.Format("blahblah: {0}", typeof(T).FullName)); 
} 
TypePrinter<System.String>(); 
+0

Первое решение работает, но секундные жалобы вроде «не могут использовать тип в контексте» – Vaclav

+0

Мой плохой, я написал его без компиляции и допустил ошибку. Обновлен ответ и преобразован в C# 5. – Toxantron

+1

Обе версии работают сейчас. Проклятье эти сильно типизированные языки. Иногда он требует очень сложной конструкции для достижения относительно простой задачи. По крайней мере, я узнал что-то новое. Спасибо. – Vaclav

1

Вы ищете что-то похожее на this-

Func<Type,string> fn = t => string.Format("blah from - {0}",t.FullName); 
Console.WriteLine(fn(typeof(Int32))); //blah from - System.Int32 
+0

Убейте вас 3s: P – Toxantron

+0

['Func Delegate'] (https://msdn.microsoft.com/en-us/library/bb549151 (v = vs.110) .aspx) - это именно то, что Я искал. Я просто не могу передать 'Class' напрямую, я должен передать' Type' в результате 'typeof()' call, который является менее сухим, но доступным. – Vaclav

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