0

この記事http://msdn.microsoft.com/en-us/library/d5x73970.aspxを読んで、機能を制限して基本的なデータ型または限定されたデータ型のセットのみを使用できるかどうかを理解しました。基本的に、int、double、float、single、string、DateTime のみで機能する関数を作成しています。では、どうすればジェネリック関数をこれに制限できますか?

4

3 に答える 3

2

それらはすべて値型です..だから、それに制限することができます:

public void YourFunction<T>() where T : struct // struct means only value types

本当にそれはあなたのユースケースに依存します..

編集:

stringあなたがあなたのリストに含まれていることに気づきませんでした。私はそれを逃しました..上記はそのためには機能しません。

于 2013-09-05T05:57:39.820 に答える
0

リストされたタイプには共通点があまりありません。これをジェネリック メソッドで実装する唯一の理由は、ボクシングを回避したり、戻り値を特定の型にキャストしたりする必要があるように思えます。私は次のようなことをします:

public class Example
{
    private static readonly HashSet<Type> supportedTypes = new HashSet<Type>
    {
        typeof(int),
        typeof(double),
        typeof(float),
        typeof(string),
        typeof(DateTime),
    };

    public T MyMethod<T>()
    {
        if (!this.supportedTypes.Contains(typeof(T))
        {
            throw new NotSupportedException();
        }

        // ...
    }
}
于 2013-09-05T06:16:47.477 に答える