提问人:Maxim Gershkovich 提问时间:3/17/2011 最后编辑:Maxim Gershkovich 更新时间:8/9/2016 访问量:47775
C# 十进制的类型后缀
C# Type suffix for decimal
问:
我不知道我想要实现的目标的正确措辞是什么,所以它可能已经在网上发布了。如果是,请善待。
好的,基本上我有这个方法。
public static T IsNull<T>(IDataReader dr, String name, T nullValue)
{
return Helpers.IsNull(dr, dr.GetOrdinal(name), nullValue);
}
public static T IsNull<T>(IDataReader dr, Int32 index, T nullValue)
{
if (dr.IsDBNull(index))
{
return nullValue;
}
else
{
return (T)dr.GetValue(index);
}
}
被调用为,我收到的错误是“无法从双倍转换为十进制”。Helpers.IsNull(dr, "UnitWholeSale", 0d)
现在我知道我可以使用,但是有没有办法让我简单地去 0dec 或类似的东西?我只是讨厌那些长快捷方式值(尤其是当您调用具有 20 个参数的构造函数时)。decimal.Zero
答:
0赞
Daniel A. White
3/17/2011
#1
改用 - 表示 。0.0m
m
decimal
评论
4赞
Eniola
1/6/2016
0.0米?为什么不只是 0m?
23赞
Adam Robinson
3/17/2011
#2
0m
会给你一个 0 值。decimal
为了完整起见,
0.0 - double
0f - float
0m - decimal
90赞
Gabe
3/17/2011
#3
0m
是你怎么说的,因为是后缀的意思。(decimal)0
m
decimal
其他后缀是 for 、 for 、 for 和 for 。它们可以是大写或小写,并且可以按任一顺序组合以形成 .f
float
d
double
u
unsigned
l
long
u
l
ulong
尽管后缀不区分大小写,但请记住 C# 语言规范第 2.4.4.2 节中的内容:
作为风格问题,建议在书写长字时使用“L”而不是“l”,因为很容易将字母“l”与数字“1”混淆。
评论
14赞
Eric Lippert
3/17/2011
并且要小心那个小写的 el。快,5432l == 54321 是真是假?:-)
7赞
Gabe
3/17/2011
@Eric:我有幸拥有一种字体,可以很容易地区分 1 和 ell,但我引用了规范建议使用大写,因为你提醒了我。
1赞
user153498
3/17/2011
#4
M
是值的后缀,例如 被视为编译器的类型。decimal
200.32M
decimal
1赞
Reed Copsey
3/17/2011
#5
您可以不使用 ,而是用于十进制值。0d
0m
1赞
BrokenGlass
3/17/2011
#6
我想真的是,否则你可以做nullValue
defaultvalue
public static T IsNull<T>(IDataReader dr, Int32 index)
{
if (dr.IsDBNull(index))
{
return default(T);
}
else
{
return (T)dr.GetValue(index);
}
}
另外,更仔细地查看您的方法,您可能想要一个可转换值并使用 Convert.ChangeType()
,我认为简单的转换不适用于所有类型:
public static T IsNull<T>(IDataReader dr, Int32 index) where T: IConvertible
{
if (dr.IsDBNull(index))
{
return default(T);
}
else
{
return (T)Convert.ChangeType(dr.GetValue(index), typeof(T));
}
}
评论
0赞
Maxim Gershkovich
3/17/2011
谢谢你的提示......我不知道这样的功能。nullValue 最好表示为 defaultValue,因为除了默认值之外,我从未真正使用过任何其他内容。
1赞
BrokenGlass
3/17/2011
@Maxim:更新了更通用的版本
0赞
Maxim Gershkovich
3/17/2011
再次感谢伙计,我喜欢当你真正学到一些东西时进行代码审查。
3赞
jh.edens
8/9/2016
#7
float value = 0f || 0.0f || (float)0;
double value = 0d || 0.0d || (double)0;
decimal value = 0m || 0.0m || (decimal)0;
请注意,最后一个示例都是强制转换,因此可能会失去精度
评论