-3

私は次のインターフェースを持っています:

public interface IObject{
double x {get;}
double y {get;}
List<IObject> List{get; set;}
}

そしてこのクラス

public class Holder<T> where T : IObject {
private T myItem;
public void ChangeItemList(T item){
myItem.List = item.List;
}

ただし、コンパイラは ChangeItemList メソッドとこの行が好きではありません:

myItem.List = item.List;

このエラーが表示されます:

Cannot convert source type 'List<T>' to target type 'List<IObject>'

なぜそれができないのですか? このシナリオの適切な解決策は何ですか? ありがとうございました

4

2 に答える 2

0

何を達成したいのかわかりませんが、以下は例外なくコンパイルおよび実行されます。

class Program
{
    static void Main(string[] args)
    {
        var holder = new Holder<IObject>();
        holder.MyItem = new Object { List = new List<IObject>() };
        holder.ChangeItemList(new Object { List = new List<IObject>() });
    }
}

public class Object : IObject
{
    public List<IObject> List { get; set; }
}

public interface IObject
{
    List<IObject> List { get; set; }
}

public class Holder<T> where T : IObject
{
    public T MyItem { get; set; }

    public void ChangeItemList(T item)
    {
        MyItem.List = item.List;
    }
}
于 2013-10-22T09:32:50.347 に答える
0

これを試してみてください-私のために働いた. myItemがnullであるという問題がありました。

public class Holder<T> where T : IObject
{
    private T myItem = Activator.CreateInstance<T>();

    public void ChangeItemList(T item)
    {
        myItem.List = item.List;
    }
}
于 2013-10-22T09:44:29.773 に答える