2010-06-29 72 views
10

我只是有點好奇心。我正在使用SSRS並調用其SOAP方法。我有生成的存根/ Web引用創建,這一切工作正常,我可以使Web服務調用確定。C#:爲特定的代碼塊使用命名空間?

問題:從WSDL生成的兩個類ReportService2005和ReportExecution有一些重疊的類定義,例如ParameterValue,DataSourceCredentials和ReportParameter。

在C#中,有沒有辦法說:「對於這個方法中的代碼塊,使用這個命名空間?」

僞/大都建的錯誤代碼:

use-this-namespace (ReportService2005) 
{ 
    ParameterValue[] values = null; 
    DataSourceCredentials[] credentials = null; 
    ReportParameter[] parameters; 
} 

我明白,我可以只寫出來的全名,ReportService2005.ParameterValue []值= NULL。或者在我的類/控制器聲明之前,我可以在頂部將兩個類別別名化。這只是我很好奇的一件事。

+0

很酷。多謝你們。我奇怪地發現學習不同語言的語法很有趣。我承認,我是一個極客。 – Jason 2010-06-29 19:58:19

+0

當使用爲核心類型提供擴展方法的庫時,每個方法的名稱空間會特別方便,例如'String'(例如Flurl [http://tmenier.github.io/Flurl/]),它爲整個代碼文件。 – springy76 2016-07-06 08:10:43

回答

12

正如別人寫的,我不認爲這是可能的。但是你可以做什麼,是別名完整的命名空間,而不是您要使用的每個單獨的類,例如:

using rs = ReportService2005; 
using re = ReportExecution; 

// ... 

rs.ParameterValue[] values = null; 
rs.DataSourceCredentials[] credentials = null; 
rs.ReportParameter[] parameters; 
re.ParameterValue v2 = ...; 
+0

雖然我可能會使用比'rs'和're'更具表現力的名字... – Svish 2010-06-29 20:09:49

1

不幸的不是。沒有這樣的語法來解決這個需求。

2

我不認爲你可以這樣做。您必須指定完全限定名稱來完成此操作。

0

AFAIK它不能做

1

如果重疊類是相同的(不只是名稱相同),並共享相同的XML命名空間等等,那麼您可以利用wsdl.exe工具的共享類型功能來生成兩個Web服務代理,以便它們爲這些重疊的類共享相同的類型定義。

http://msdn.microsoft.com/en-us/library/7h3ystb6%28VS.80%29.aspx

查看「/ sharetypes」選項,看看是否適合您的情況。

+0

哦,我沒有意識到。我一直在使用VS2010的Web參考工具。我會試一試。 – Jason 2010-06-29 20:27:07

+0

我相信VS代理生成器(網頁參考工具)實際上在幕後使用wsdl.exe工具。如果這個選項適合你,那麼很好。缺點是,如果您的Web服務發生更改,則需要再次運行該命令,而不是右鍵單擊Visual Studio中的Web引用並選擇「更新」。但是,這應該不會太糟糕。您可以將該命令放入批處理文件或生成腳本中以簡化處理過程。 – 2010-06-29 21:09:55

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#中,你可以得到非常接近使用其它相同的行爲接近:

  • 使用較短的變量名
  • 使用進口混疊(如Martin建議)
+0

哦,有趣。雖然我不使用VB.NET,但仍然很酷知道。謝謝。 – Jason 2010-06-29 20:12:13

2

你可以做什麼,是你的類的部分:

public partial class MyWebServiceClass 

在你的主源文件,並創建第二個源文件,該方法要使用其他命名空間

// MyWebServiceClass.usingMethods.cs 

using ReportService2005; 
public partial class MyWebServiceClass 
{ 
    // methods... 
} 
+0

當然,你仍然不能在一個方法中混合使用默認的命名空間,所以在這裏使用其他的建議,但是這樣,如果你想爲一個或兩個方法只有一個默認的命名空間,你可以分開方法。 – maxwellb 2010-06-29 20:08:38

7

另一個鮮爲人知的C#的功能,你可能會感興趣,而類似於馬丁的回答,基本上混疊一類在Imports塊:

using ListOfDictionary = System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, string>>; 

,並宣佈它作爲

ListOfDictionary list = new ListOfDictionary(); 

此功能,和樣品,在另一個問題被發現;具體如下:Hidden Features of C#?

+0

這很酷。不過,不得不在每個文件中發佈別名都是很大的損失。像這樣的工作名稱空間範圍內的東西將是非常有用的。 – zanlok 2014-01-18 12:54:57

+0

如果這是你真的需要廣泛使用的東西,那麼繼承可能會更好。這種鋸齒方式對於一次性使用非常方便,特別是因爲您不必離開類文件即可找出這種未知類型的來源。 – STW 2014-01-18 17:55:09