gpt4 book ai didi

c# - 如何编写一个类以使用不同的数字类型多次编译?

转载 作者:太空狗 更新时间:2023-10-29 22:54:44 25 4
gpt4 key购买 nike

我正在尝试编写处理不同数字类型的类。我知道 C#(我相信通常还有 .Net)没有 INumber 接口(interface),所以我不能使用类似下面的东西:

    public class Adder<T> where T:INumber
{
public T Add(T a, T b)
{
return a + b;
}
}

不过没关系,因为我想避免对每个数字进行装箱/拆箱。但是,我可以对我想要支持的每种类型使用条件编译:

#if FLOAT 
public class AdderF
{
public float Add(float a, float b)
#else
public class Adder
{
public int Add(int a, int b)
#endif
{
return a + b;
}
}

不过,这意味着我需要编译不同的 Library.dllLibraryF.dll。有没有更优雅的解决方案?

显然,在我的例子中,我可以简单地把代码写两遍。然而,我想使用这个过程来创建具有整数版本和浮点版本的大型复杂数据结构,因此不希望在更新我的结构时出现复制粘贴错误的可能性。我也不希望将浮点结构包装在整数包装器中,并且不必要地将所有输入转换为更宽松的数据类型,从而导致速度损失。

最佳答案

我想这取决于你希望它有多严格。您是否想要一个仅采用完全相同类型(int 和 int、float 和 float)的两个参数的 Add 方法...?如果不是,并且性能不是特别重要,那么您只需使用 decimal 实现您的解决方案,它就可以正常工作。

如果它确实必须是严格的,并且您想要每种类型的特定版本,您可能需要查看 T4 代码生成。它类似于 C++ 的模板(有些人认为 C++ 模板和 C# 泛型是相同的,但事实并非如此)。

Scott Hanselman 写道 an interesting article关于它。

关于c# - 如何编写一个类以使用不同的数字类型多次编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com