C# Type suffix for decimal

眉间皱痕 提交于 2019-12-03 09:26:16
Gabe

0m is how you say (decimal)0 because m is the suffix that means decimal.

Other suffixes are f for float, d for double, u for unsigned, and l for long. They can be either upper- or lower-case and u can be combined with l in either order to make a ulong.

Although the suffixes are not case-sensitive, keep in mind what it says in the C# language specification, section 2.4.4.2:

As a matter of style, it is suggested that “L” be used instead of “l” when writing literals of type long, since it is easy to confuse the letter “l” with the digit “1”.

0m will give you a decimal 0 value.

For the sake of completeness,

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

Be aware that each last example is a cast and therefor can lose precision

M is the suffix for decimal values, e.g. 200.32M is considered to be of type decimal to the compiler.

Instead of using 0d, you can use 0m for decimal values.

I assume nullValue is really defaultvalue, otherwise you could just do

public static T IsNull<T>(IDataReader dr, Int32 index)
{
    if (dr.IsDBNull(index))
    {
        return default(T);
    }
    else
    {
        return (T)dr.GetValue(index);
    }
}

Also looking more closely at your method you probably want a convertible value and use Convert.ChangeType() , I don't think the simple casting would work for all types:

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

Use 0.0m instead - m denotes decimal.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!