私はカスタムタイプコンバータが必要なのでIEnumerable<T>
を実装するカスタムタイプを作成しようとしています。私はIEnumerable<string> MyProp
からStringList<T> MyProp
に私の古いプロパティの種類を変更したときに、これらのプロパティは、例えば設定されているとき、私はエラーを取得し、しかしIEnumerableでカスタムのIEnumerable実装が失敗する
[TypeConverter(typeof(StringListTypeConverter))]
public class StringList<T> : IEnumerable<T>, IStringConvertible
{
// ... implementations of IEnumerable<T>
}
:現在、私はこれを持っていますコメントからの質問のよう
'System.String[]' to 'StringList<String>'
'System.Collections.Generic.IEnumerable<String>' to 'StringList<String>'. An explicit conversion exists (are you missing a cast?)
注:
MyProp = new[]{"test"};
MyProp = SomeListArray.Select(s => $"{s}_test");
私はエラーを取得します。 T
のIEnumerable
をQueryString
経由でapi-serverに渡したいとします。 URLをできるだけ短くするために、私はパラメータ?MyProp=test,anotherstring,evenMoreString&MyIntProp=1,4,12,134
だけを使いたいと思っています。 サーバー側では、この文字列をIEnumerable<T>
(例:QueryString
〜IEnumerable<string>
とIEnumerable<int>
の場合)に変換し直したいとします。
私はすでに
public static implicit operator StringList<T>(IEnumerable<T> elements)
{
return new StringList<T>(elements);
}
暗黙の演算子を追加しようとしたが、これは、C#の仕様から禁止されています。では、設定したコード全体ではなく、プロパティの型を変更するだけで何ができますか(これはかなり大きなリファクタリングです)。あなたのMyProp
プロパティの型がStringList<T>
ある場合は、配列はそれから派生しませんbecause
を? –
@ S.Petrosovこれは、これらのIEnumerablesが設定されているすべてのコードをリファクタリングすることを意味するため、私は避けたいものです。 – KingKerosin
名前付きStringListの型がパラメータTを持つ理由は? 'class StringList:IEnumerable'でなければならないのですか? –
Evk