7

私の関数では、文字列とタイプを T として渡す必要があります。T に基づいて、文字列 val をそのタイプとして解析したいのですが、この質問のタイトルからエラーが発生します。この機能を達成するための洞察や他の方法を持っている人なら誰でも、大歓迎です。

T Parse<T>(string val) where T : System.Object
    {
        TypeCode code = Type.GetTypeCode(typeof(T));
        switch (code)
        {
            case TypeCode.Boolean:
                return System.Boolean.Parse(val);
                break;
            case TypeCode.Int32:
                return Int32.Parse(val);
                break;
            case TypeCode.Double:
                return Double.Parse(val);
                break;
            case TypeCode.String:
                return (string)val;
                break;
        }
        return null;
    }
4

1 に答える 1

21

削除するだけwhere T : System.Objectです。

次のように述べます。

where T : System.Object

Tメソッドで使用可能な型Parseはオブジェクトから継承する必要があると言っています。
ただし、C# のすべてのオブジェクトはから継承するSystem.Objectため、その制約は必要ありません (おそらく、コンパイラがそれを許可しない理由の 1 つです)。

また、 を返すので、型を参照型にnull制約する必要があります。T

where T: class

ただし、この方法では、ブール値、整数、またはその他の値の型を返すことはできません。

ただし、コードは基本的に の機能を模倣してConvert.ChangeTypeいます。唯一の違いは、ジェネリックを使用してオブジェクトではなく正しい型を返すことですが、基本的には次のようになります。

T Parse<T>(string val)
{
    return (T)Convert.ChangeType(val,typeof(T));
}
于 2012-07-13T17:00:32.987 に答える