C#中,default(int)的值是0,我期望写一个函数,如果不是int,则返回default的值,如果是int,则返回-1,大家谁有好的思路?
我有两种思路:
1:该方式下面,非模板函数不会执行,所以行不通
[TestClass]
public class UnitTest_DataTable
{
/// <summary>
/// 正常测试,设置属性成功,并获得期望结果
/// </summary>
[TestMethod]
public void UnitTest_Default()
{
int val = Get<int>();
Assert.Equals(val, -1);
}
private T Get<T>()
{
T t = default(T);
GetDefault(ref t);
return t;
}
private void GetDefault(ref int t)
{
t = -1;
}
private void GetDefault<T>(ref T t)
{
t = default(T);
}
}
而且中间有装箱拆箱,对性能有损失
2: 我的第二中方案,非模板函数也不会执行,也行不通
[TestClass]
public class UnitTest_DataTable
{
/// <summary>
/// 正常测试,设置属性成功,并获得期望结果
/// </summary>
[TestMethod]
public void UnitTest_Default()
{
int val = Get<int>();
Assert.Equals(val, -1);
}
private T Get<T>()
{
return GetDefault<T>(); ;
}
private int GetDefault()
{
return -1;
}
private T GetDefault<T>()
{
return default(T);
}
}
请教大家谁有好的思路,实现该功能?
通过发射获取类型,如果是int,返回-1;否则:return default(T)
这个我试过,不行
private T Get<T>()
{
if(typeof(T).Equal(typeof(int)))
{
return -1;
}
return GetDefault<T>(); ;
}
编译通不过
@荣--: 这个只是类型不一样。既然T的int,才会返回-1,那就用T转化一下。
搞定了,虽然有一次装箱拆箱
[TestClass]
public class UnitTest_DataTable
{
/// <summary>
/// 正常测试,设置属性成功,并获得期望结果
/// </summary>
[TestMethod]
public void DataTable_Default_Int()
{
int val = Get<int>();
Assert.IsTrue(val == -1);
}
[TestMethod]
public void DataTable_Default_Strig()
{
string val = default(string);
Assert.Equals(val, "");
}
private T Get<T>()
{
if (typeof(T).Equals(typeof(int)))
{
object val = -1;
return (T)val;
}
return GetDefault<T>(); ;
}
private int GetDefault()
{
return -1;
}
private T GetDefault<T>()
{
return default(T);
}
}
return value is int?value:-1;
你加个重载方法不就完了么?
GetDefault<T>(T defaultValue)