处理任何类型的方法

时间:2011-04-04 16:40:21

标签: c# delegates types

我有两节课。

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类中的任何Type。但'T'似乎不起作用,int无法转换为它。 如果有更好的方法或有什么问题,请发表评论。

2 个答案:

答案 0 :(得分:5)

您需要创建委托类型和方法以使用泛型。就个人而言,我会使用标准代表:

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; 
        });
    }
}

答案 1 :(得分:0)

您的代码无法正常工作的原因是因为 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