3 回答
TA贡献1825条经验 获得超6个赞
约束不是签名的一部分,但参数是签名的一部分。在重载解析过程中会强制执行参数约束。
因此,让我们将约束放入参数中。很难看,但是可以用。
class RequireStruct<T> where T : struct { }
class RequireClass<T> where T : class { }
static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // 1
static void Foo<T>(T? a) where T : struct { } // 2
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
(迟到比没有迟到六年吗?)
TA贡献1859条经验 获得超6个赞
在第一种方法上删除结构约束。如果需要区分值类型和类,则可以使用参数的类型来实现。
static void Foo( T? a ) where T : struct
{
// nullable stuff here
}
static void Foo( T a )
{
if( a is ValueType )
{
// ValueType stuff here
}
else
{
// class stuff
}
}
- 3 回答
- 0 关注
- 626 浏览
添加回答
举报