在整个程序中简单地输入typedef原始类型?

时间:2014-01-09 17:45:19

标签: c#

出于性能原因,我使用的是long而不是decimal

我想区分longlong表示longdecimal表示using myDecimal = System.Int64;。所以我想宣布像using myDecimal = System.Int64;这样的东西。但是这种声明只在它声明的文件中可见。我需要一些可以在整个程序中使用的东西。

Herehere建议创建“包装”类,但它看起来很尴尬!我想我最好将long复制粘贴到我正在使用的每个文件中。

我是否认为我没有比这两个选项更好的东西?

为什么我不想只使用public class FutTradeEntry { public long orderId; public int status; public int amount; public int amount_rest; public sbyte action; public myDecimal price; public myDecimal deal_price; public int ext_id; } ?因为可读性!只需比较

public class FutTradeEntry
{
    public long orderId;
    public int status;
    public int amount;
    public int amount_rest;
    public sbyte action;
    public long price;
    public long deal_price;
    public int ext_id;
}

long

使用相同类型long来存储完全不同的东西是非常困惑的。每当我看到{{1}}变量时,我都会想到“它是什么,长或小数?”

3 个答案:

答案 0 :(得分:5)

  

我是否认为我没有比这两个选项更好的东西?

不,还有第三种选择:当事物是long时,说出long,故事结束。这就是我要做的。

答案 1 :(得分:1)

没有其他选择。只需通过usingstruct包装的别名。我个人选择struct包装器,因为它提供了更好的类型安全性,您可以根据需要定义重载运算符。它的工作量更大,但比在整个代码库中复制和粘贴一行代码更好,这样会更容易出错并且维护性更差。

请注意,使用class包装它会使其成为引用类型,而struct类型(与{相同} {1}}和其他原始类型。)

答案 2 :(得分:1)

目前我还不清楚这里的目标是什么,但这是为至少原始类型的整数子集创建“新名称”的一种(略微有点冒犯)方式:

public enum MyMeaningfulLong : long
{
}

它比typedef强一点,但它有类似的效果。然而,这里更大的问题是,它有点违背了“枚举”的精神,它代表了一组已知的常数值。包装类(可能带有隐式转换)是一种更清晰的方法。