C# 在整个程序中键入def基元类型的简单方法?

C# 在整个程序中键入def基元类型的简单方法?,c#,C#,出于性能原因,我使用了long而不是decimal 我想把long与long区分开来,后者表示decimal。所以我想用myDecimal=System.Int64声明类似于的东西。但是这样的声明只在它声明的文件中可见。我需要一些可以在整个程序中使用的东西 建议创建“包装器”类,但它看起来太笨拙了!我想我最好使用myDecimal=System.Int64复制粘贴到我正在使用的每个文件 我没有比这两种选择更好的选择,对吗 为什么我不想只使用long?因为可读性!比较一下 public class

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

我想把
long
long
区分开来,后者表示
decimal
。所以我想用myDecimal=System.Int64声明类似于
的东西。但是这样的声明只在它声明的文件中可见。我需要一些可以在整个程序中使用的东西

建议创建“包装器”类,但它看起来太笨拙了!我想我最好使用myDecimal=System.Int64复制粘贴
到我正在使用的每个文件

我没有比这两种选择更好的选择,对吗

为什么我不想只使用
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;
}


使用相同类型的
long
来存储完全不同的东西是非常令人困惑的。每次看到
long
变量时,我都会想“它是什么,long还是decimal?”

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


请注意,用
包装它将使其成为引用类型,而
结构
是值类型(与
长型
和其他基本类型相同)。

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

请注意,用
包装它将使其成为引用类型,而
结构
是值类型(与
和其他基本类型相同)

我没有比这两种选择更好的选择,对吗

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

我没有比这两种选择更好的选择,对吗


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

我仍然不清楚这里的目标是什么,但这里有一种(有点难闻)方法可以为基本类型的整数子集创建一个“新名称”:

public enum MyMeaningfulLong : long
{
}

它比typedef强一点,但有类似的效果。不过,这里更大的问题是,它有点违背了“enum”的精神,即表示一组已知常量值中的一个。包装类(可能带有隐式转换)是一种更干净的方法。

我仍然不清楚这里的目标是什么,但这里有一种(有点难闻的)方法可以为基本类型的整数子集创建一个“新名称”:

public enum MyMeaningfulLong : long
{
}

它比typedef强一点,但有类似的效果。不过,这里更大的问题是,它有点违背了“enum”的精神,即表示一组已知常量值中的一个。包装类(可能带有隐式转换)是一种更干净的方法。

我对这里的意图很好奇;decimal和long的行为非常不同,因此不清楚在哪里可以作为编译选项在它们之间切换。@DanBryant(我假设OP正在做的是)本质上如果你想用long L表示一个非整数值d,你可以将它写成
L=d*10^X
,其中X是某个固定值。基本上你知道所有的长都是10的幂,比它们实际代表的数字大。这或多或少是
Decimal
内部所做的,除了
Decimal
X不是固定的;该值的某些位表示它是什么。例如,如果OP表示货币,而不是使用
Decimal
,他基本上可以使用long来表示美分的数量。a
long
long
long
=
系统。Int64
long
在您的程序中何时表示
decimal
?使用术语
decimal
会导致阅读问题的人产生很多困惑,因为
decimal
是一种现有的C类型。我相信这样做的目的是:例如,您有两个函数,
GetPerson(long id)
GetOrder(long id)
。即使基础类型是long,您也希望将签名更改为
GetPerson(PersonID)
GetOrder(OrderID)
,这样编译器将保护您不被意外地使用PersonID调用
GetOrder
。Servy是正确的,这是金融应用程序(HFT交易)所以我只是存储一些类似“美分数”的东西,我对这里的意图很好奇;decimal和long的行为非常不同,因此不清楚在哪里可以作为编译选项在它们之间切换。@DanBryant(我假设OP正在做的是)本质上如果你想用long L表示一个非整数值d,你可以将它写成
L=d*10^X
,其中X是某个固定值。基本上你知道所有的长都是10的幂,比它们实际代表的数字大。这或多或少是
Decimal
内部所做的,除了
Decimal
X不是固定的;该值的某些位表示它是什么。例如,如果OP表示货币,而不是使用
Decimal
,他基本上可以使用long来表示美分数。a
long