私は2つのList <>を編集する必要があるフィールドと同じフィールドにします。これらのリストに共通の関数を書くには?ジェネリック使用されるだろう2つの一般的な関数List <>
public List<?> CutField(List<?> list)
{
foreach(var element in list)
{
element.Field = // ;
}
return List<?>;
}
私は2つのList <>を編集する必要があるフィールドと同じフィールドにします。これらのリストに共通の関数を書くには?ジェネリック使用されるだろう2つの一般的な関数List <>
public List<?> CutField(List<?> list)
{
foreach(var element in list)
{
element.Field = // ;
}
return List<?>;
}
ベストな方法:あなたのリスト内のすべての可能なタイプ。もちろん、
public interface MyInterface
{
object Field { get; set; } // or whatever datatype you need for the field
}
で
public List<T> CutField<T>(List<T> list) where T : MyInterface
{
foreach(T element in list)
{
element.Field = // ;
}
return list;
}
は、そのインターフェイスを実装する必要があります。
また、パラメータとして渡されたリストを変更しているので、戻り値の型をCutField
から省略することもできます。
こんにちは。私はそれを書いたが、Tは赤で、VSは私に書き込みます:cfnnjtはシンボルTを解決し、赤はどこですか:非ジェネリック宣言では制約は許されません – jack
Ooops、私は答えを更新しました。 – HimBromBeere
はい、今は動作しています!しかし、今私はこの一般的な2つのリストを渡すことができますか? – jack
プロパティを指定して、これらの2つのタイプが同じインターフェイスを実装していますか? (あなたは本当にフィールドを公に公開したくない...)また、リスト要素が参照するオブジェクトを変更しているだけなので、リストを返すのはなぜですか? –
これらの2つの型が同じインタフェースを実装し、リストを 'List'として宣言します。 –
@TimSchmelter:または、タイプパラメータにタイプ制約を持つジェネリックメソッドがあります。これは柔軟性があります。 –