2011-03-17 70 views
22

我不知道正确的写法是什么什么,我试图实现,因此它可能已经在网上公布。请善待,如果是的话。C#类型后缀为十进制

好了,所以基本上我有这个方法。

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)和我得到的错误是“无法从双转换为十进制”。

现在我知道我可以使用decimal.Zero但有一些办法,我可以简单地去0dec无或类似的东西?我只是讨厌那些长的捷径值(特别是当你用20个参数调用构造函数时)。

回答

54

0m就是你怎么说(decimal)0因为m是指decimal后缀。

其他后缀是ffloatddoubleuunsigned,并llong。它们可以是大写或小写,并且u可以与l结合使用以创建ulong

虽然后缀是不区分大小写,记住它在C#语言规范说,部分2.4.4.2:

作为一个风格问题,因此建议“L”是因为容易将字母“l”与数字“1”混淆,所以在写入long类型的文字时使用“l”而不是“l”。

+7

并小心小写el。快,是5432l == 54321是真是假? :-) – 2011-03-17 04:42:35

+3

@Eric:我很喜欢这种字体,可以很容易地区分一个字体和一个字体,但是我引用了规范中使用大写字母的建议,因为您提醒了我。 – Gabe 2011-03-17 05:51:59

0

使用0.0m代替 - m表示decimal

+1

0.0m?为什么不只是0米? – Eniola 2016-01-06 09:51:46

10

0m会给你一个decimal 0值。

为了完整起见,

0.0 - double 
0f - float 
0m - decimal 
+0

正是我所需要的并且直截了当。 +1 – Lukas 2017-11-22 18:45:27

1

Mdecimal值的后缀,例如, 200.32M被认为是编译器的类型decimal

1

而不是使用0d的,你可以使用0m为十进制值。

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

此外,在你的方法更密切地看着你可能需要一个转换的价值和使用​​,我不认为简单的铸件会工作所有类型:

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

谢谢你的提示......我不知道这样的功能。 nullValue会更好地表示为defaultValue,因为我从未真正使用除默认值之外的任何其他值。 – 2011-03-17 00:54:09

+1

@Maxim:用更通用的版本更新 – BrokenGlass 2011-03-17 01:12:10

+0

再次感谢队友,当你真正学到东西时,我喜欢代码审查。 – 2011-03-17 05:26:35

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

注意,每次最后一个例子是一个演员和为此可能会失去精度