返回类型的说明

本文关键字:说明 返回类型 | 更新日期: 2023-09-27 17:56:49

我不明白返回类型...我是一名 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;
}

谢谢

返回类型的说明

它返回一个匿名类型(VB.NET 引用)。它是没有相应类的类型。

Visual Basic 支持匿名类型,这使您无需为数据类型编写类定义即可创建对象。相反,编译器会为您生成一个类。该类没有可用的名称,直接从 Object 继承,并包含在声明对象时指定的属性。由于未指定数据类型的名称,因此将其称为匿名类型。

不,它返回匿名类型。

您返回的是匿名类型。

这基本上就像动态创建一个类。

公式标记左侧的每个值都是一个属性名称。

这将返回具有以下属性的匿名类型(不是数组):percentComplete、message、fileName 和 downloadBytes。

转换为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

看起来它正在返回一个匿名实例,该实例具有属性 percentComplete、message、fileName 和 downloadBytes 。调用方必须使用反射来访问属性(或在 .NET 4 中使用dynamic关键字)。

更简单的做法是创建一个具有这些属性的类,并返回该类型的实例而不是匿名类型,以避免使用反射。

它返回一个具有一些命名属性的对象。如果//Not ready yet,则为 null