Проверьте, является ли объект делегатом - PullRequest
11 голосов
/ 28 апреля 2011

В .NET, есть ли способ проверить, принадлежит ли объект типу делегата?

Мне это нужно, потому что я регистрирую параметры вызовов методов и хочу напечатать "(delegate)" для всех параметров, которые являются действиями или функциями.

Ответы [ 4 ]

26 голосов
/ 28 апреля 2011

Конечно, так же, как с любым другим типом:

if (foo is Delegate)

Или для типа:

if (typeof(Delegate).IsAssignableFrom(t))
5 голосов
/ 28 апреля 2011

Это прекрасно работает для меня

class Test
    {
        public delegate void MyHandler(string x);

        public void RunTest()
        {
            var del = new MyHandler(Method);
            if (del is Delegate)
            {
                Console.WriteLine(@"del is a delegate.");
            }
            else
            {
                Console.WriteLine("del is not a delegate");
            }

        }

        private void Method(string myString)
        {
        }
    }
2 голосов
/ 28 апреля 2011

Вы можете просто проверить, является ли obj is Delegate.
Все типы делегатов наследуют базовый Delegate класс.

1 голос
/ 28 апреля 2011

Да. Проверьте, наследуется ли тип от System.Delegate. Вот рабочий пример с несколькими простыми тестами, чтобы убедиться, что у нас есть правильный объект делегата:

using System;

public class MyClass
{
    delegate void DelegateType();
    public static void Main()
    {
        DelegateType obj = method;
        obj.Method.Invoke(null, null);

        if (obj is System.Delegate)
            Console.WriteLine("Type is a delegate");
        else        
            Console.WriteLine("Type is NOT a delegate");
    }

    private static void method() {Console.WriteLine("Invoked");}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...