0

私は次のクラスを持っています:

 public interface IWaybillDocument
    {
        long DocumentId { get; set; }
        long BillingDocumentId { get; set; }

        string ShipToName { get; set; }
        byte AddressType { get; set; }
        string City { get; set; }
        string Country { get; set; }
        string PostCode { get; set; }
        string StateRegion { get; set; }
        string Street1 { get; set; }
        string Street2 { get; set; }
        string Suburb { get; set; }

        void MergeAddressing(Address address);
    }
}

    public class WaybillDocumentList : ERPListBase<IWaybillDocument>
    {
        public WaybillDocumentList() : base() { }
    }

 public partial class WaybillDocument : IWaybillDocument, INonrepudiable
    {

        public void MergeAddressing(Address address)
        {
            address.Street1 = this.Street1;
            address.Street2 = this.Street2;
            address.Suburb = this.Suburb;
            address.City = this.City;
            address.ZipCode = this.PostCode;
            address.StateRegion = this.StateRegion;
            address.Country = this.Country;
            address.AddressKind = (AddressKind)this.AddressType;
        }
    }

それらはすべてうまくコンパイルされますが、この拡張メソッドを適用しようとすると:

 public static EntitySet<T> ToEntitySetFromInterface<T, U>(this IList<U> source)
            where T : class, U
        {
            var es = new EntitySet<T>();
            IEnumerator<U> ie = source.GetEnumerator();
            while (ie.MoveNext())
            {
                es.Add((T)ie.Current);
            }
            return es;
        }

このような:

public void InsertWaybills(WaybillDocumentList waybills)
        {
            try
            {
                ;
                this.Context.WaybillDocuments.InsertAllOnSubmit(waybills.ToEntitySetFromInterface<WaybillDocument, IWaybillDocument>());
                this.Context.SubmitChanges();
            }
            catch (Exception ex)
            {
                throw new DALException("void InsertWaybills(WaybillList waybills) failed : " + ex.Message, ex);
            }
        }

コンパイルエラーが発生します

型 'WaybillDocument' は、ジェネリック型またはメソッド 'LinqExtensions.ToEntitySetFromInterface(System.Collections.Generic.IList)' の型パラメーター 'T' として使用できません。「WaybillDocument」から「IWaybillDocument」への暗黙的な参照変換はありません

waybills.ToEntitySetFromInterface<WaybillDocument, IWaybillDocument>()

下線付き。インターフェイスを明確に継承するのはなぜですか?

更新: ERPListBase (詳細は削除されました)

public class ERPListBase<T> : List<T>
{
    public ERPListBase()
        : base() {}
}
4

1 に答える 1

1

コードを新しいプロジェクトに貼り付け、ERPListBase -> List などの小さな変更を加えてコンパイルしました。したがって、IWaybillDocument という名前の 2 つのインターフェイスがあり、そのうちの 1 つをどこかで参照していると思います。

于 2012-07-12T10:35:51.487 に答える