gpt4 book ai didi

c# - 在实现该接口(interface)的类中强制执行数字类型的接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:05 25 4
gpt4 key购买 nike

有一些技巧可以强制泛型类仅适用于数字类型(参见 this)

我正在创建一个库,我最终在许多类定义中编写了 where T : struct, IComparable ...。我想创建一个像这样的空界面:

public interface INumeric<T> 
where T :
struct,
IComparable,
IComparable<T>,
IConvertible,
IEquatable<T> { }

然后在我的通用类中实现该接口(interface):

public struct StepSize<T> : INumeric<T>

但是当我尝试比较一个数字时

if (value.CompareTo(default(T)) <= 0)

我得到错误:

'T' does not contain a definition for 'CompareTo' ...

为什么我会收到错误消息?我已经在接口(interface)中限制了 T 的类型,所以 T 必须是 IComparable

编辑:这里有两个类

namespace NumericalAlgorithms
{
using System;

public interface INumeric<T>
where T :
struct,
IComparable,
IComparable<T>,
IConvertible,
IEquatable<T>
{ }
}

namespace NumericalAlgorithms.NumericalMethods
{
using System;

public struct StepSize<T> : INumeric<T>
{
public T Value
{
get;
private set;
}

public StepSize(T value)
: this()
{
if (value.CompareTo(default(T)) <= 0)
throw new Exception("The step size must be greater than zero.");

this.Value = value;
}
}
}

最佳答案

尝试替换

public struct StepSize<T> : INumeric<T>

通过

public struct StepSize<T> : INumeric<T>
where T :
struct,
IComparable,
IComparable<T>,
IConvertible,
IEquatable<T>

关于c# - 在实现该接口(interface)的类中强制执行数字类型的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28586127/

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