首页 新闻 赞助 找找看

C#中,default(int)的值是0,我期望写一个函数,如果不是int,则返回default的值,如果是int,则返回-1,大家谁有

0
悬赏园豆:20 [待解决问题]

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);
}
}
请教大家谁有好的思路,实现该功能?

荣--的主页 荣-- | 初学一级 | 园豆:184
提问于:2016-04-28 11:23
< >
分享
所有回答(4)
0

通过发射获取类型,如果是int,返回-1;否则:return default(T)

幻天芒 | 园豆:37175 (高人七级) | 2016-04-28 11:35

这个我试过,不行

private T Get<T>()
{

if(typeof(T).Equal(typeof(int)))

{

return -1;

}
return GetDefault<T>(); ;
}

编译通不过

支持(0) 反对(0) 荣-- | 园豆:184 (初学一级) | 2016-04-28 11:41

@荣--: 这个只是类型不一样。既然T的int,才会返回-1,那就用T转化一下。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2016-04-28 13:03
0

搞定了,虽然有一次装箱拆箱

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

荣-- | 园豆:184 (初学一级) | 2016-04-28 11:47
0

return value is int?value:-1;

慧☆星 | 园豆:5640 (大侠五级) | 2016-04-28 16:38
0

你加个重载方法不就完了么?

GetDefault<T>(T defaultValue)

Daniel Cai | 园豆:10424 (专家六级) | 2016-04-28 18:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册