2016-08-30 7 views
-3

私は2つのList <>を編集する必要があるフィールドと同じフィールドにします。これらのリストに共通の関数を書くには?ジェネリック使用されるだろう2つの一般的な関数List <>

public List<?> CutField(List<?> list) 
{ 
    foreach(var element in list) 
    { 
     element.Field = // ; 
    } 
    return List<?>; 
} 
+1

プロパティを指定して、これらの2つのタイプが同じインターフェイスを実装していますか? (あなたは本当にフィールドを公に公開したくない...)また、リスト要素が参照するオブジェクトを変更しているだけなので、リストを返すのはなぜですか? –

+6

これらの2つの型が同じインタフェースを実装し、リストを 'List 'として宣言します。 –

+3

@TimSchmelter:または、タイプパラメータにタイプ制約を持つジェネリックメソッドがあります。これは柔軟性があります。 –

答えて

0

ベストな方法:あなたのリスト内のすべての可能なタイプ。もちろん、

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から省略することもできます。

+0

こんにちは。私はそれを書いたが、Tは赤で、VSは私に書き込みます:cfnnjtはシンボルTを解決し、赤はどこですか:非ジェネリック宣言では制約は許されません – jack

+0

Ooops、私は答えを更新しました。 – HimBromBeere

+0

はい、今は動作しています!しかし、今私はこの一般的な2つのリストを渡すことができますか? – jack

関連する問題