Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测哪个';使用';必须提供声明_C#_.net - Fatal编程技术网

C# 检测哪个';使用';必须提供声明

C# 检测哪个';使用';必须提供声明,c#,.net,C#,.net,假设我有以下代码: using System; using Microsoft.CSharp; namespace myNamespace { static class myClass { static void Main(string[] args) { // Code goes here } } } 我们还假设上面的注释被C#中的一些代码所替换,这些代码可能需要也可能不需要包含在文档中的任何名称空间 此外,为了简单起

假设我有以下代码:

using System;
using Microsoft.CSharp;

namespace myNamespace {
    static class myClass {
        static void Main(string[] args) {
            // Code goes here
        }
    }
}
我们还假设上面的注释被C#中的一些代码所替换,这些代码可能需要也可能不需要包含在文档中的任何名称空间

此外,为了简单起见,让我们假设代码不包含任何注释

我正在使用StringBuilder存储和修改此代码,我想做的是添加所有必要的“using”语句

例如,如果代码使用了,那么我应该添加“;”陈述这应该适用于所有可能的“使用”语句

我想到了使用正则表达式。例如,我可以使用一个正则表达式,该正则表达式尝试查找System.Collections.Generic命名空间中定义的至少一个类,如果它成功找到一个,则应停止搜索并添加“using System.Collections.Generic;”声明

然而,考虑到.NET类库中有多少名称空间,以及每个名称空间中定义了多少类和接口,我认为这种方法会导致代码庞大且速度缓慢


有更好、更快、更聪明的方法吗?

去买ReSharper吧。您是在运行时生成此代码还是什么?因为IDE会为您完成这项工作,当然像ReSharper这样的插件也会。另外,值得注意的是,添加using语句不会“导致代码庞大而缓慢”。编译器只会忽略它不需要的部分。处理一个包含大量using语句的文件可能需要稍长一点的时间,但考虑到编译的总体成本,这与此无关。如果visual studio是您的IDE,则它提供通过IntelliSense智能标记在运行时使用语句添加
。甚至还有一个“删除未使用的usings”编辑器命令,用于清理。@CodyGray是的,我实际上是在运行时生成代码。当我说代码会很慢时,我实际上是在谈论添加所有必要引用的过程(因为涉及到大量搜索),而不是以后生成的代码的性能。在生成的代码中,
使用
语句没有多大意义。只需完全限定每个参考。在编写代码生成器时,您知道类的全名,因此不要丢失这些信息。例如,如果您想生成使用
List
的代码,您知道
List
实际上是
System.Collections.Generic.List
,所以代码生成器应该这样称呼它。现在无需使用
参考,绝对无速度损失。使用
语句的唯一优点是代码可读性,并且没有人会读取自动生成的代码。只需购买ReSharper即可。您是在运行时生成此代码还是什么?因为IDE会为您完成这项工作,当然像ReSharper这样的插件也会。另外,值得注意的是,添加using语句不会“导致代码庞大而缓慢”。编译器只会忽略它不需要的部分。处理一个包含大量using语句的文件可能需要稍长一点的时间,但考虑到编译的总体成本,这与此无关。如果visual studio是您的IDE,则它提供通过IntelliSense智能标记在运行时使用
语句添加
。甚至还有一个“删除未使用的usings”编辑器命令,用于清理。@CodyGray是的,我实际上是在运行时生成代码。当我说代码会很慢时,我实际上是在谈论添加所有必要引用的过程(因为涉及到大量搜索),而不是以后生成的代码的性能。在生成的代码中,
使用
语句没有多大意义。只需完全限定每个参考。在编写代码生成器时,您知道类的全名,因此不要丢失这些信息。例如,如果您想生成使用
List
的代码,您知道
List
实际上是
System.Collections.Generic.List
,所以代码生成器应该这样称呼它。现在无需使用
参考,绝对无速度损失。使用
语句的唯一优点是代码可读性,并且没有人读取自动生成的代码。