namespace MyOldService
{
public MyNewService.AddressList ToPrivateAddressList()
{
MyNewService.AddressList privAddrList = new MyNewService.AddressList();
privAddrList.creator = (MyNewService.AddressListCreator)this.creator;
privAddrList.listId = this.listId;
privAddrList.listIdSpecified = this.listIdSpecified;
privAddrList.listName = this.listName;
privAddrList.listType = (MyNewService.AddressingMode)this.listType;
privAddrList.lastModified = this.lastModified;
privAddrList.lastModifiedSpecified = this.lastModifiedFieldSpecified;
if (this.siteList != null && this.listType == MyOldService.AddressingMode.XDAddressingModeSiteIDList)
{
privAddrList.siteList = new long[this.siteList.Length];
Array.Copy(this.siteList, privAddrList.siteList, this.siteList.Length);
}
...
SOAP名前空間MyOldServiceで定義されたリストを、新しい名前空間MyNewServiceの同じレイアウトのクラスにコピーするために書かれました。 MyAldService名前空間をMyOtherAppServiceという3番目の名前空間にインポートすると、私のAddressListクラスがその3番目の名前空間のメンバーになり、そのように参照されるという問題があります。名前空間をメソッドに渡すにはどうすればよいですか?
コードを複製するのではなく、ジェネリックスに似たものを使ってコードを飾りたいと思っています(何とか調整してください)。 [各スニペットからわかるように、各ネームスペースから必要な複数のタイプがあります]。これにより、必要なネームスペースでアドレスリストを対応するクラスに変換できます。可能?
を編集してください。以下のコメントのいくつかに応じて、私がしようとしていることのより良い例を定義しようとします。
Web参照からWSDLからインポートされた3つのクラスです(いいえ、これらはコンパイルされません)。クラスAddressListはすべて同じレイアウトです。
namespace A
{
enum Mode {};
enum Creator {};
class ATypeClass {}
public partial class AddressList
{
int id;
enum Mode mode;
enum Creator creator
long[] siteList;
ATypeClass[] cspList;
}
}
namespace B
{
enum Mode {};
enum Creator {};
class BTypeClass {}
public partial class AddressList
{
int id;
enum Mode mode;
enum Creator creator
long[] siteList;
BTypeClass[] cspList;
}
}
namespace C
{
enum Mode {};
enum Creator {};
class CTypeClass {}
public partial class AddressList
{
int id;
string name;
enum Mode mode;
enum Creator creator
long[] siteList;
CTypeClass[] cspList;
}
}
私は新しい方法で名前空間Aで部分クラスを拡張します:問題の一部は、クラス別の名前空間の各部分に加えて、あることを
namespace A
{
public partial class AddressList
{
public T.AddressList ToPrivateAddressList<T>()
{
T.AddressList privAddrList = new T.AddressList();
privAddrList.creator = (T.Creator)this.creator;
privAddrList.id = this.id;
privAddrList.name = this.name;
privAddrList.mode = (T.Mode)this.mode;
if (this.siteList != null && this.listType == Mode.XDAddressingModeSiteIDList)
{
privAddrList.siteList = new long[this.siteList.Length];
Array.Copy(this.siteList, privAddrList.siteList, this.siteList.Length);
}
...
}
}
}
をお知らせまた、さまざまな名前空間からの列挙型です。私は右のあなたの問題をundesrtood場合
B.AddressList al1 = A.AddressList.ToPrivateAddressList<B>();
C.AddressList al1 = A.AddressList.ToPrivateAddressList<C>();
をどこで参照の問題はありますか?フルネーム(namespacename.classname)のクラスを参照することはできますか? – Vlad
私は彼がfqnなしでAddressクラスを参照することができると思うと思う – payo
@payo:私はこの利便性は余分なコードの価値があるとは思わない:) – Vlad