1

これは私のコードの単純化されたバージョンです (先に進むには手がかりだけが必要です)。

インターフェースがあるとします:

public interface IParse <T>
{
    bool TryParse (string value, out T result);
}

これは私のメソッドですClass

public static T GetParsedValueOrDefault<T>(string val)  where T : IParse<T>
{
        T ret = default (T);
        ret.TryParse(val, out ret);
        return ret
}

この構文は使用できません:

Class.GetParsedValueOrDefault<bool>("False"); //Error

エラーが発生します:

There is no boxing conversion from 'bool' to 'IParse<bool>'

これまたは提案された同様のアプローチを機能させるにはどうすればよいですか?

P/S : ちょっと検索の達人、それが (tnx) の重複である質問を教えてください

4

3 に答える 3

1

あなたのアプローチの問題は次のとおりです。どこIParse<T>から適切な実装を取得しますか? IParse<T>はインターフェイスであり、インターフェイスをインスタンス化することはできず、実装するクラスがいくつか存在する可能性がありますIParse<bool>

ファクトリ アプローチを使用することをお勧めします。

public static class Parse
{
    public static IParse<T> Create<T>()
    {
        ...
        return ...;
    }
}

そして、あなたのメソッドはこれを行います:

public static T GetParsedValueOrDefault<T>(string val)
{
    IParse<T> parser = Parse.Create<T>();
    T ret;
    if (parser.TryParse(val, out ret)) {
        return ret;
    }
    return default(T);
}
于 2013-09-08T13:38:49.593 に答える
0

多分これ

public static bool GetParsedValueOrDefault<T>(string val, out T result)  where T : IParse<T>
{
    result = default(T);
    result.TryParse(val, out result);
    return result
}

しかし、少し奇妙です。

多分あなたは意味します:

public static T GetParsedValueOrDefault<T>(string val)  where T : IParse<T>
{
    var result = default(T);
    result.TryParse(val, out result);
    return result
}
于 2013-09-08T11:48:39.833 に答える