-1

組み込みのコンパイラ変数タイプ:int、float、double、short、...
IsBetweenを実装するにはこれが必要です

public bool IsBetween<T>(this T input) where T : [built-in compiler variable types] {
    return false;
}

直接的な方法がない場合は、他の方法でも問題ありません。

4

5 に答える 5

6

組み込み型や数値型はIsBetween必要ありません。順序付きの型が必要です。これは、以下を実装することを意味しますIComparable<T>

public bool IsBetweenInclusive<T>(this T input, T lower, T upper)
    where T : IComparable<T>
{
    return IsBetweenInclusive(input, lower, upper, Comparer<T>.Default);
}

public bool IsBetweenInclusive<T>(this T input, T lower, T upper, IComparer<T> comparer)
{
    return (comparer.Compare(lower,input) <= 0)&&
           (comparer.Compare(upper,input) >= 0);
}
于 2013-02-26T18:36:02.233 に答える
3

「コンパイラ変数型」がプリミティブ型を意味する場合、そのような制限はありません。

MSDN-タイプパラメータに関する制約

構造体を使用してほとんどの組み込み型を許可できますが、独自の構造体を定義することもでき、それが許可されます。

IsBetween数値比較を一般化するために構築していると思いますa <= x <= b。それがあなたの意図である場合、それを一般的に行う方法はを使用することIComparable<T>です。

public static bool IsBetween<T>(this T input, T lower, T upper) where T : IComparable<T> {
    return lower.CompareTo(input) < 0 && input.CompareTo(upper) < 0;
}
于 2013-02-26T18:35:47.040 に答える
2

where T : structすべての値型をカバーするために使用

http://msdn.microsoft.com/en-us/library/d5x73970.aspx

于 2013-02-26T18:31:57.000 に答える
1

C#では、「プリミティブ型」とは何かという正式な定義はありません。そのような用語は仕様に記載されていません。

入力をプリミティブ型のみに制限する追加可能な一般的な制約はありません。これらの型が何であるかを知る方法がないためです。

最善の方法は、必要なタイプごとにメソッドをオーバーロードすることです。

public bool IsBetween(this int input)
{
    return false;
}

public bool IsBetween(this double input)
{
    return false;
}

public bool IsBetween(this float input)
{
    return false;
}

//...

intfromからlong、fromsingleからなどの演算子間の暗黙的な変換により、doubleオプションでそれらの一部を省略して、変換で処理できるようにすることができます。

于 2013-02-26T18:36:59.207 に答える
0

「組み込みのコンパイラ変数型」が何を意味するのかは明確ではありません。

public bool IsBetween<T>(this T input) where T : struct {
    return false;
}

適している可能性があります。

于 2013-02-26T18:33:03.323 に答える