gpt4 book ai didi

c# - 如何检测泛型类型参数是否为浮点类型?

转载 作者:行者123 更新时间:2023-12-03 07:53:44 25 4
gpt4 key购买 nike

我有一个通用方法,可以序列化一些数字配置条目。此外,仅对于浮点类型,它必须存储区域性信息。如何判断模板参数是浮点类型?

这是我尝试过的:

    public void Bar<T>() where T : System.Numerics.INumber<T> {
T aa = default(T);

// this is ugly
if (aa is float || aa is double)
{
}

// error: The type 'T' cannot be used as type parameter 'TSelf' in the generic type
// or method 'IFloatingPoint<TSelf>'. There is no boxing conversion or type parameter
// conversion from 'T' to 'System.Numerics.IFloatingPoint<T>'.
if (aa is IFloatingPoint<T>)
{
}

// works fine and IFloatingPoint<T> would also work if T was constrained to
// IFloatingPoint<T> (but I need to accept also integer types)
if (aa is INumber<T>)
{
}


}

我能以某种方式改写aa is IFloatingPoint<T>吗?表达式(或使用类似的东西)使其工作并优雅地检查 T反对浮点型?与 C++ 类似

if constexpr (std::is_floating_point_v<T>) {
}

最佳答案

如果您确实想检查IFloatingPoint<T>一致性,您可以检查:

typeof(T).GetInterface("IFloatingPoint`1") != null

但是检查double确实没有任何问题。和float如果您仅使用这两种类型,则单独进行。您不需要默认值。就这么做

typeof(T) == typeof(double) || typeof(T) == typeof(float)

关于c# - 如何检测泛型类型参数是否为浮点类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76538991/

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