我有两节课。
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无法转换为它。 如果有更好的方法或有什么问题,请发表评论。
答案 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