C# 使用扩展方法代替C中的内置方法#

C# 使用扩展方法代替C中的内置方法#,c#,C#,有些内置方法不适用于我,我的应用程序使用的是旧版本的.NetFramework,它没有一些新方法。因此,我正在尝试创建覆盖内置方法的扩展方法。但我在工作中遇到了一些问题。代码如下: using System; using System.IO; using System.Net; using System.Xml; using System.Text; using System.Collections.Generic; namespace API{ public static class

有些内置方法不适用于我,我的应用程序使用的是旧版本的.NetFramework,它没有一些新方法。因此,我正在尝试创建覆盖内置方法的扩展方法。但我在工作中遇到了一些问题。代码如下:

using System; 
using System.IO; 
using System.Net;
using System.Xml;
using System.Text;  
using System.Collections.Generic;
namespace API{
public static class Retrive 
{               
    // some variables

    public static void CopyTo(this Stream input, Stream output)///Extension method
    {

        byte[] buffer = new byte[32768];  
        int read;

        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            output.Write (buffer, 0, read);
        }
    }   

    public static void Main ()
    {
          string url = "https://";          
          string baseURL = "";   
          string authenticateStr = "";

        try 
        {
            ///
            }


        catch (WebException e) 
        {
            using (WebResponse response = e.Response) 
            {
                ////
            }
        }
    }  // end main()
}  // end class
}//结束名称空间

我得到的错误是

1) 扩展方法必须在顶级静态类中定义; “Retrive”是一个嵌套类

我不明白为什么“检索”类会嵌套

2) 扩展方法必须在非泛型静态类中定义

如何解决这些问题?请帮帮我


谢谢。

尝试在任何其他类中保留“static void Main()”。我的意思是,除了您尝试用于创建扩展的方法之外。

看起来您的主要方法也在Retriev类中。我建议为extensions方法创建一个单独的类,如下所示:

public static class ExtMethods 
{
  public static void CopyTo(this Stream input, Stream output)///Extension method
  {
    byte[] buffer = new byte[32768];  
    int read;
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
    {
       output.Write (buffer, 0, read);
    }
  }  
}

非泛型静态类表示您正在创建一个不使用模板的类

e、 列表是泛型类,但MemoryStream或许多类不是泛型类


嵌套类的答案已经在这个线程中给出了。

我感觉我们缺少了代码文件的一部分。对吗?您正在定义名称空间吗?为什么要将主函数从程序移到检索?程序类真的被删除了吗?我无法重现你的问题。由于“responseText=sr.ReadToEnd();”和“List uriList=new List();”之间的类型(字符“s”),代码无法编译。其次,并非所有名称空间都是完整的,因为列表应使用namespace System.Collection.Generic。第三,并非所有变量都声明为“url”和“baseURL”.Andi如果我没有弄错您的扩展,因为它具有与我不需要定义的指令和名称空间相同的签名,那么当我在应用程序中编译代码时,代码将使用所需的指令和名称空间进行修饰。因此,我错过了名称空间。现在我将名称空间添加到代码中。根据您报告的错误,似乎我们没有查看您的全部代码。我看不到任何其他方法来获取您看到的错误。是的,建议将它们分开,但由于Main和CopyTo可以在同一个静态类中共存,这不是问题的答案。是的,建议将它们分开,但因为Main和CopyTo可以在同一个st中共存同学们,这不是问题的答案。