0

コンマ区切りの文字列をそのタイプのリストにキャストするために、このメソッドを作成しました。

public List<T> GetListFromString<T>(string commaSplited)
{
  return commaSplited.Split(',').Cast<T>().ToList();
}

しかし、「指定されたキャストは無効です」という例外がスローされます。
長い入力でテストしました。

4

1 に答える 1

7

T文字列の場合、コードは確実に機能します (テストしました)。

Tintなどののものである場合、この例外が発生します。

この作品

List<string> result = GetListFromString<string>("abc, 123, hij");

これは失敗します

List<int> resultInt = GetListFromString<int>("23, 123, 2");

これは、文字列intにキャストまたは変換できないためです。たとえば、次の例も失敗します。

int three = (int)"3";

修正

public List<T> GetListFromString<T>(string commaSplited)
    {
        return (from e in commaSplited.Split(',') 
                select (T)Convert.ChangeType(e, typeof(T))).ToList();
    }

ただし、指定されたすべての文字列はTに変換可能でなければなりません。たとえば、次の例は依然として失敗します。

List<int> resultIntFail = GetListFromString<int>("23, abc, 2");

「abc」はint型に変換できないためです。

また、Tは、 System.Convert()がstringから変換する方法を知っている型でなければなりません。

于 2012-07-29T07:24:48.433 に答える