Не используйте GetMethod
, используйте GetMethods
, затем отметьте IsGenericMethod
.
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var mi = Type.GetType("X").GetMethods().Where(method => method.Name == "Y");
Console.WriteLine(mi.First().Name + " generic? " + mi.First().IsGenericMethod);
Console.WriteLine(mi.Last().Name + " generic? " + mi.Last().IsGenericMethod);
}
}
class X
{
public void Y()
{
Console.WriteLine("I want this one");
}
public void Y<T>()
{
Console.WriteLine("Not this one");
}
}
В качестве бонуса - метод расширения:
public static class TypeExtensions
{
public static MethodInfo GetMethod(this Type type, string name, bool generic)
{
if (type == null)
{
throw new ArgumentNullException("type");
}
if (String.IsNullOrEmpty(name))
{
throw new ArgumentNullException("name");
}
return type.GetMethods()
.FirstOrDefault(method => method.Name == name & method.IsGenericMethod == generic);
}
}
Тогда просто:
static void Main(string[] args)
{
MethodInfo generic = Type.GetType("X").GetMethod("Y", true);
MethodInfo nonGeneric = Type.GetType("X").GetMethod("Y", false);
}
Как и в большинстве ответов, это действительно зависит от того, чего вы пытаетесь достичь с вашей отладкой? Базовая разработка, устранение проблем с производительностью? Для базовой разработки всех предыдущих ответов более чем достаточно.
В частности, для тестирования производительности я рекомендую Firebug. Возможность определить, какие методы являются самыми дорогими с точки зрения времени, была неоценимой для ряда проектов, над которыми я работал. По мере того как клиентские библиотеки становятся все более и более надежными, а на клиентскую сторону в целом возлагается больше ответственности, этот тип отладки и профилирования станет только более полезным.
Firebug Console API: http://getfirebug.com/console.html
Firebug - один из самых популярных инструментов для этой цели.
Я использую Venkman , отладчик JavaScript для приложений XUL .
Я обнаружил, что новая версия Internet Explorer 8 (нажмите F12 ) очень хорошо подходит для отладки кода JavaScript.
Конечно, Firebug хорошо, если вы используете Firefox.
Помимо использования отладчика JavaScript Visual Studio, я написал свою собственную простую панель, которую я включаю на страницу. Это просто как Окно непосредственного доступа Visual Studio. Я могу изменять значения своих переменных, вызывать свои функции и просматривать значения переменных. Он просто оценивает код, написанный в текстовом поле.
Я использую несколько инструментов: Fiddler , Firebug и Visual Studio. Я слышал, что в Internet Explorer 8 есть хороший встроенный отладчик.
Вы также можете попробовать YUI Logger . Все, что вам нужно сделать, чтобы использовать его, - это включить пару тегов в свой HTML. Это полезное дополнение к Firebug, которое более или менее необходимо.
Visual Studio 2008 имеет несколько очень хороших инструментов отладки JavaScript. Вы можете удалить точку останова в коде JavaScript на стороне клиента и пройти через нее, используя те же инструменты, что и код на стороне сервера. Нет необходимости подключаться к процессу или делать какие-либо хитрые действия для его включения.
Мой первый шаг - всегда проверять HTML и проверять синтаксис с помощью JSLint . Если у вас чистая разметка и правильный код JavaScript, то пора использовать Firebug или другой отладчик.
Я использовал Firebug , пока не вышел Internet Explorer 8. Я не большой поклонник Internet Explorer, но после некоторого времени, проведенного со встроенными инструментами разработчика, которые включают в себя действительно хороший отладчик, кажется бессмысленным использовать что-либо еще. Я должен снять шляпу перед Microsoft, они проделали фантастическую работу с этим инструментом.
Я использую меню / консоль разработчика WebKit (Safari 4). Он почти идентичен Firebug.
console.log ()
- новый черный цвет - намного лучше, чем alert ()
.
Хотя alert (msg);
работает в тех сценариях «Я просто хочу узнать, что происходит» ... каждый разработчик сталкивался тот случай, когда вы попадаете в (очень большой или бесконечный) цикл, из которого вы не можете выйти.
Я бы рекомендовал, чтобы во время разработки, если вам нужна очень удобная опция отладки, используйте отладку вариант, позволяющий вырваться наружу. (PS Opera, Safari? И Chrome? Все это доступно в их собственных диалоговых окнах)
//global flag
_debug = true;
function debug(msg){
if(_debug){
if(!confirm(msg + '\n\nPress Cancel to stop debugging.')){
_debug = false;
}
}
}
С помощью вышесказанного вы можете погрузиться в большой цикл отладки всплывающих окон, где нажмите Enter / Хорошо позволяет вам пролистывать каждое сообщение, но нажатие Escape / Отмена позволяет быстро прервать работу.
Начните с Firebug и IE Debugger.
Однако будьте осторожны с отладчиками в JavaScript. Время от времени они будут влиять на среду настолько, чтобы вызвать некоторые ошибки, которые вы пытаетесь отладить.
Примеры:
Для Internet Explorer это обычно постепенное замедление и своего рода сделка типа утечки памяти. . Примерно через полчаса мне нужно перезапустить. Похоже, это довольно обычная работа.
Для Firebug, вероятно, прошло больше года, так что это могла быть более старая версия. В результате я не помню деталей, но в основном код работал некорректно, и после попытки отладить его на некоторое время я отключил Firebug, и код работал нормально.