2011-05-16 144 views
0

我不明白返回類型...我是一名VB開發人員。它是否返回一些數組?返回類型描述

[System.Web.Services.WebMethod] 
[System.Web.Script.Services.ScriptMethod] 
public static object GetUploadStatus() 
{ 
    //Get the length of the file on disk and divide that by the length of the stream 
    UploadDetail info = (UploadDetail)HttpContext.Current.Session["UploadDetail"]; 
    if (info != null && info.IsReady) 
    { 
     int soFar = info.UploadedLength; 
     int total = info.ContentLength; 
     int percentComplete = (int)Math.Ceiling((double)soFar/(double)total * 100); 
     string message = "Uploading..."; 
     string fileName = string.Format("{0}", info.FileName); 
     string downloadBytes = string.Format("{0} of {1} Bytes", soFar, total); 
     return new { 
       percentComplete = percentComplete, 
       message = message, 
       fileName = fileName, 
       downloadBytes = downloadBytes}; 
    } 
    //Not ready yet 
    return null; 
} 

謝謝

+1

http://msdn.microsoft.com/en-us/library/bb397696.aspx - 匿名類型 – 2011-05-16 13:05:12

+0

嘗試的http://轉換器.telerik.com /獲得初步翻譯(在這種情況下翻譯看起來不錯) – 2011-05-16 13:10:50

+0

感謝@Bala它的一個好工具.. – 2011-05-17 04:34:58

回答

3

它返回一個anonymous type(VB.NET參考)。這是一種沒有相應類的類型。

Visual Basic支持匿名類型,它允許您在不爲數據類型編寫類定義的情況下創建對象。相反,編譯器會爲您生成一個類。該類沒有可用的名稱,直接從Object繼承,並且包含您在聲明對象時指定的屬性。由於數據類型的名稱未指定,因此它被稱爲匿名類型。

3

沒有其返回一個匿名類型。

3

您要退回Anonymous Type

它基本上就像在飛行中創建一個類一樣。

方程式標記左側的每個值都是屬性名稱。

1

這是返回一個具有以下屬性的匿名類型(不是數組):percentComplete,message,fileName和downloadBytes。

0

看起來它正在返回一個帶有屬性percentComplete,message,fileName和downloadBytes的匿名實例。調用者將不得不使用反射來訪問屬性(或在.NET 4中使用dynamic關鍵字)。

更容易的是用這些屬性創建一個類並返回該類型的實例而不是匿名類型以避免使用反射。

+2

其實你可以使用「Cast By例如「如果對象正在被讀取的同一個程序集中*讀取匿名類型的實例,並避免反射或動態。但是,如果您在同一個裝配體內部進行此操作,那麼爲什麼不只是製造一個內部標稱類型呢? – 2011-05-16 14:14:24

0

它返回一個具有一些命名屬性的對象。則返回null //Not ready yet

1

轉換爲VB可以幫助你:

<System.Web.Services.WebMethod> _ 
<System.Web.Script.Services.ScriptMethod> _ 
Public Shared Function GetUploadStatus() As Object 
    Dim info As UploadDetail = DirectCast(HttpContext.Current.Session("UploadDetail"), UploadDetail) 
    If info IsNot Nothing AndAlso info.IsReady Then 
     Dim soFar As Integer = info.UploadedLength 
     Dim total As Integer = info.ContentLength 
     Dim percentComplete As Integer = CInt(Math.Ceiling(CDbl(soFar)/CDbl(total) * 100)) 
     Dim message As String = "Uploading..." 
     Dim fileName As String = String.Format("{0}", info.FileName) 
     Dim downloadBytes As String = String.Format("{0} of {1} Bytes", soFar, total) 
     Return New With { _ 
      Key .percentComplete = percentComplete, _ 
      Key .message = message, _ 
      Key .fileName = fileName, _ 
      Key .downloadBytes = downloadBytes _ 
     } 
    End If 
    Return Nothing 
End Function 
+0

不太可能會幫助不知道匿名初始化程序的人。即使在VB.NET中,他們也會使用某種奇怪的花括號語法...... :-) – 2011-05-16 13:30:25