Обрабатывать любой тип в методе - PullRequest
1 голос
/ 04 апреля 2011

У меня есть два класса.

public class Handler
{

delegate T ReturnDelegate();

    public T HandleReturnMethod(ReturnDelegate d)
    {
        DoSomething(); //some other stuff

        return d();
    }
} 


public partial class Test
{

    protected int Id
    {
        get
        {
            return new Handler().HandleReturnMethod(delegate()
            {
                int id = 1;
                return id; 
            });
        }
    }
}

Я хочу иметь возможность обрабатывать любой тип в классе Handler.Но «Т», кажется, не работает, int не может быть преобразовано в него.Если есть лучший подход или что-то здесь не так, пожалуйста, прокомментируйте.

Ответы [ 2 ]

5 голосов
/ 04 апреля 2011

Вам необходимо создать тип и метод делегата для использования обобщений. Лично я бы использовал для этого стандартный делегат:

public T HandleReturnMethod<T>(Func<T> d)
{
    DoSomething(); //some other stuff
    return d();
}

Учитывая вышесказанное, ваш код должен работать:

protected int Id
{
    get
    {
        return new Handler().HandleReturnMethod(() =>
        {
            int id = 1;
            return id; 
        });
    }
}
0 голосов
/ 04 апреля 2011

Причина, по которой ваш код не работал, заключается в том, что int ( Int32 ) - это структура, а не объект, поэтому она обычно не может быть обнуляемой, если вы не объявите ее как INT?num = null;

Если я не ошибаюсь, только объект может иметь Тип (и объект, и тип являются классами), а не структуру,Все классы основаны на объектном классе (что является причиной того, что коллекция, не являющаяся универсальным (т. Е. Тип t) элементами, является объектами.

http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=VS.100).aspx

http://msdn.microsoft.com/en-us/library/ah19swz4.aspx

http://msdn.microsoft.com/en-us/library/ah19swz4(v=VS.100).aspx

http://msdn.microsoft.com/en-us/library/system.int32.aspx

http://msdn.microsoft.com/en-us/library/system.type.aspx

http://msdn.microsoft.com/en-us/library/system.object.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...