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来表示美分的数量。along
是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来表示美分数。along
是