【问题标题】:C# Help converting this code from VB.NET to C#C# 帮助将此代码从 VB.NET 转换为 C#
【发布时间】:2009-04-14 21:33:57
【问题描述】:

任何帮助将不胜感激,我正在尝试将下面的代码转换为 C#,我从未使用过 VB.NET,所以 ReDim 对我来说是一个新的。

谢谢

Dim inFile As System.IO.FileStream
Dim binaryData() As Byte
Dim strFileName As String

strFileName = "C:\MyPicture.jpeg"

inFile = New System.IO.FileStream(strFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)

''//Retrive Data into a byte array variable
ReDim binaryData(inFile.Length)
Dim bytesRead As Long = inFile.Read(binaryData, 0, CInt(inFile.Length))
inFile.Close()

【问题讨论】:

    标签: c# vb.net


    【解决方案1】:

    代码可以逐字转换,但有一种更简单的方法可以实现这一点(从文件中读取所有字节),即

    var binaryData = File.ReadAllBytes(strFileName);
    

    我个人会将 strFileName 重命名为 fileName,因为匈牙利表示法在 .NET 代码中不受欢迎……但这是另一回事!

    【讨论】:

    • 注意:在旧版本的 .Net 中,将“var”替换为“byte[]”。
    • @Brain:不,在 C#3.0 之前的编译器中,将 var 替换为 byte[]。
    • @Brian - 你的意思是旧版本的 C#;您仍然可以在 .NET 2 中使用“var”
    • @Brian - 是的,为指出这一点而欢呼。我已经习惯了 C# 3.0,以至于忘记了在旧版本中不能使用 var!
    • 错误使用 var 的绝佳例子。
    【解决方案2】:

    这很容易转换成 C#。

    FileStream inFile;
    byte[] binaryData;
    string strFileName;
    
    strFileName = @"C:\MyPicture.jpeg";
    
    inFile = new System.IO.FileStream(strFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
    
    binaryData = new byte[inFile.Length];
    int bytesRead = inFile.Read(binaryData, 0, binaryData.Length);
    inFile.Close();
    

    但是有一个更好的方法来写这个。

    string fileName = @"C:\MyPicture.jpeg";
    byte[] binaryData = File.ReadAllBytes(fileName);
    

    【讨论】:

      【解决方案3】:

      相信ReDim语句只是用来初始化数组:

      byte[] binaryData;
      
      binaryData = new byte[inFile.Lenght];
      

      【讨论】:

        【解决方案4】:

        嗯,最接近的翻译应该是:

        binaryData = new byte[inFile.Length];
        

        因为它没有被分配,或者:

        Array.Resize(ref binaryData,inFile.Length);
        

        如果它之前已被分配。然而,代码本身是非常不安全的(你不应该假设Read 读取了所有请求的数据);这里有一个更简单的方法:

        binaryData = File.ReadAllBytes(strFileName);
        

        【讨论】:

          【解决方案5】:

          如果您要将大量 VB.NET 转换为 C#,您可能需要查看 VBConversions conversion tool

          【讨论】:

            【解决方案6】:

            ReDim 重新分配数组。大多数情况下,这是一种代码异味:一种症状或真的想要一个集合类型而不是数组。这段代码应该做你想做的:

            string FileName = @"C:\MyPicture.jpeg";
            byte[] binaryData;
            long bytesRead;
            
            using (var inFile = new System.IO.FileStream(FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read) )
            {
                binaryData = new byte[inFile.Length];
                bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length);
            }
            //I'm assuming you're actually doing something with each byte array here
            

            【讨论】:

            • @Joel - 即使这有点异味;假设流将读取请求的数据量是不安全的;即使对于简单的情况,技术上也需要一个循环(检查 Read 的返回)。大多数流(包括 FileStream)对此表示宽容 - 但不是全部。
            • 是的:修复它,以便 bytesRead 在 using 语句之后仍然在范围内。
            【解决方案7】:

            ReDim 用于调整数组大小。 (如果需要,您也可以保留内容。此代码不这样做)

            【讨论】:

              【解决方案8】:

              这是一个永久性的解决方案,以防您将来需要再次执行此操作。

              这里是在线 VB 到 C# 代码转换器的链接,反之亦然。一个是here,另一个是here

              LinkText1:http://www.developerfusion.com/tools/convert/vb-to-csharp/ LinkText2:http://converter.telerik.com/

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-12-17
                相关资源
                最近更新 更多