C#中用于decimal数据类型的后缀

45

我不知道我所要实现的正确措辞是什么,所以它可能已经在网上发布了。如果已经有人发过,请友善地告诉我。

好的,基本上我有这个方法。

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),我收到的错误是“无法将double转换为decimal”。

现在我知道我可以使用 decimal.Zero,但是否有一种简单的方法可以直接输入0dec或类似的内容?我讨厌那些长的快捷方式值(特别是当你调用具有20个参数的构造函数时)。

7个回答

90

0m是表示十进制 0 的方式,因为后缀m表示decimal(十进制)。

其他后缀包括f表示float(单精度浮点数),d表示double(双精度浮点数),u表示unsigned(无符号整型),l表示long(长整型)。它们可以是大小写字母,而且可以以任何顺序将ul组合成ulong(无符号长整型)。

虽然这些后缀不区分大小写,但请记住C#语言规范第2.4.4.2节所说的内容:

作为一种风格,建议在编写类型为long的字面值时使用“L”而不是“l”,因为字母“l”很容易与数字“1”混淆。


14
小心那个小写的字母el。快问,5432l == 54321 是真还是假? :-) (注:这句话可能在讨论编程语言中某个变量名中包含小写字母"l"和数字"1"的区别) - Eric Lippert
7
@Eric:我很幸运地有一种字体,使得区分数字1和字母l变得容易,但是因为你提醒了我,我引用了规范建议使用大写字母。 - Gabe

23

0m会给你一个十进制的0值。

为了完整起见,

0.0 - double
0f  - float
0m  - decimal

3
float value = 0f || 0.0f || (float)0;
double value = 0d || 0.0d || (double)0;
decimal value = 0m || 0.0m || (decimal)0;

请注意,最后一个示例是强制类型转换,因此可能会失去精度。


1

M十进制(decimal)值的后缀,例如200.32M被编译器视为decimal类型。


1

在使用十进制数值时,您可以使用0m代替0d


1

我假设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));
    }
}

谢谢您的提示……我之前不知道有这样的功能。nullValue 最好改为 defaultValue,因为我从来没有使用过默认值以外的任何东西。 - Maxim Gershkovich
1
@Maxim:更新了一个更通用的版本。 - BrokenGlass
再次感谢你,伙计。当你真正学到东西时,我喜欢代码审查。 - Maxim Gershkovich

0

使用0.0m代替 - m表示十进制数


4
为什么不直接写0m,而要写成0.0m? - Eniola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接