11

文字列値をさまざまな型にキャストするために正常に機能する拡張メソッドがあります。これは次のようになります。

public static T ToType<T> (this string value, T property)
    {
        object parsedValue = default(T);
        Type type = property.GetType();

        try
        {
            parsedValue = Convert.ChangeType(value, type);
        }
        catch (ArgumentException e)
        {
            parsedValue = null;
        }

        return (T)parsedValue;
    }

ただし、メソッドを呼び出すときにこれがどのように見えるかに不満があります。

myObject.someProperty = stringData.ToType(myObject.someProperty);

プロパティの型を取得するためだけにプロパティを指定するのは冗長に思えます。私はむしろこのような署名を使用したいと思います:

public static T ToType<T> (this string value, Type type) { ... }

T を Type of type にします。これにより、呼び出しがよりクリーンになります。

myObject.someProperty = stringData.ToType(typeof(decimal));

しかし、この方法で呼び出そうとすると、エディターは、拡張メソッドの戻り値の型が使用法から推測できないと文句を言います。T を Type 引数にリンクできますか?

私は何が欠けていますか?

ありがとう

4

3 に答える 3

2

なぜプロパティを使用するのですか?タイプ変数をジェネリックのタイプに設定する方法を変更するだけです。

    public static T ToType<T>(this string value)
    {
        object parsedValue = default(T);
        Type type = typeof(T);

        try
        {
            parsedValue = Convert.ChangeType(value, type);
        }
        catch (ArgumentException e)
        {
            parsedValue = null;
        }

        return (T) parsedValue;
    }

使用法:

myObject.someProperty = stringData.ToType<decimal>()
于 2013-07-23T17:59:11.403 に答える