我只是有好奇心。我正在使用SSRS并调用其SOAP方法。我已经生成了存根/创建了Web引用,并且一切正常,我可以使Web服务调用正常。
问题:从WSDL,ReportService2005和ReportExecution生成的两个类有一些重叠的类定义,例如ParameterValue,DataSourceCredentials,ReportParameter。
在C#中,有没有办法说,“对于方法中的这段代码,请使用此命名空间?”
伪/主要是构建错误代码:
use-this-namespace (ReportService2005)
{
ParameterValue[] values = null;
DataSourceCredentials[] credentials = null;
ReportParameter[] parameters;
}
据我所知,我只能写出全名,ReportService2005.ParameterValue [] values = null。或者我可以在我的类/控制器声明之前在顶部对两个类进行别名。这只是我很好奇的事情。
答案 0 :(得分:13)
正如其他人所写的那样,我认为这是不可能的。但是你可以做的是将完整的命名空间别名,而不是你想要使用的每个单独的类,例如:
using rs = ReportService2005;
using re = ReportExecution;
// ...
rs.ParameterValue[] values = null;
rs.DataSourceCredentials[] credentials = null;
rs.ReportParameter[] parameters;
re.ParameterValue v2 = ...;
答案 1 :(得分:7)
另一个鲜为人知的C#功能可能会引起您的兴趣,与Martin的回答类似,基本上是在Imports
块中对一个类进行别名:
using ListOfDictionary = System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, string>>;
并将其声明为
ListOfDictionary list = new ListOfDictionary();
注意此功能和示例在另一个问题中找到;具体来说:Hidden Features of C#?
答案 2 :(得分:2)
我认为你不能那样做。您必须指定完全合格的名称才能执行此操作。
答案 3 :(得分:2)
您可以做的是将您的课程标记为部分:
public partial class MyWebServiceClass
在您的主源文件中,并使用您想要使用其他命名空间的方法创建第二个源文件
// MyWebServiceClass.usingMethods.cs
using ReportService2005;
public partial class MyWebServiceClass
{
// methods...
}
答案 4 :(得分:1)
不幸的是没有。没有这样的语法来满足这种需求。
答案 5 :(得分:1)
如果重叠的类相同(不只是命名相同)并共享相同的XML命名空间等,那么您可以利用wsdl.exe工具的sharetypes功能来生成两个Web服务代理这样他们就可以为那些重叠的类共享相同的类型定义。
http://msdn.microsoft.com/en-us/library/7h3ystb6%28VS.80%29.aspx
查看“/ sharetypes”选项,看看它是否适用于您的情况。
答案 6 :(得分:1)
虽然与使用命名空间或C#无关,但VB.NET支持With
关键字,该关键字可用作访问对象成员的快捷方式:
SomeReallyLongName.Property1 = 1
SomeReallyLongName.Property2 = 2
SomeReallyLongName.Property3 = 3
SomeReallyLongName.Property4 = 4
SomeReallyLongName.Property5 = 5
可以改写为:
With SomeReallyLongName
.Property1 = 1
.Property2 = 2
.Property3 = 3
.Property4 = 4
.Property5 = 5
End With
它不在C#中,因为你可以使用其他方法非常接近相同的行为:
答案 7 :(得分:0)
AFAIK无法完成