1. ホーム
  2. c#

[解決済み】一般的な TryParse

2022-04-09 14:51:43

質問

TryParse」を使用して、文字列が指定された型であるかどうかをチェックする汎用エクステンションを作成しようとしています。

public static bool Is<T>(this string input)
{
    T notUsed;
    return T.TryParse(input, out notUsed);
}

シンボル 'TryParse' を解決できないので、これはコンパイルされません。

私の理解では、'TryParse' はどのインターフェースにも属していません。

これは全くできないのでしょうか?

更新してください。

以下の回答を使って、私が思いついたこと。

public static bool Is<T>(this string input)
{
    try
    {
        TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(input);
    }
    catch
    {
        return false;
    }

    return true;
}

なかなかうまくいくのですが、例外をそういう風に使うのは、私にはしっくりこないような気がします。

更新2:

ジェネリックを使用せず、型を渡すように変更。

public static bool Is(this string input, Type targetType)
{
    try
    {
        TypeDescriptor.GetConverter(targetType).ConvertFromString(input);
        return true;
    }
    catch
    {
        return false;
    }
}

解決方法は?

を使用する必要があります。 TypeDescriptor クラスがあります。

public static T Convert<T>(this string input)
{
    try
    {
        var converter = TypeDescriptor.GetConverter(typeof(T));
        if(converter != null)
        {
            // Cast ConvertFromString(string text) : object to (T)
            return (T)converter.ConvertFromString(input);
        }
        return default(T);
    }
    catch (NotSupportedException)
    {
        return default(T);
    }
}