Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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语言中的代码?_C#_Linq - Fatal编程技术网

C# 有没有办法缩短C语言中的代码?

C# 有没有办法缩短C语言中的代码?,c#,linq,C#,Linq,我有一个任务,它告诉我创建一个文件,在该文件中插入随机字母数字字符和关键字VIRUS。我认为我所用的逻辑对于这个任务来说已经足够了 我只是想知道有没有办法缩短我写的代码?因为我想学习更多关于如何高效地编写代码的知识。我仍然是个书呆子,自学成才;欢迎有建设性的反馈。这是我的作业。谢谢D using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; usin

我有一个任务,它告诉我创建一个文件,在该文件中插入随机字母数字字符和关键字VIRUS。我认为我所用的逻辑对于这个任务来说已经足够了

我只是想知道有没有办法缩短我写的代码?因为我想学习更多关于如何高效地编写代码的知识。我仍然是个书呆子,自学成才;欢迎有建设性的反馈。这是我的作业。谢谢D

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RBC_Task_3 {
    class Program {
        static void Main(string[] args) {
            beginning: Console.WriteLine(
                "This program inputs a random alphanumeric array into a file.\n" +
                "The keyword \"VIRUS\" is sometimes inserted randomly inside the file.\n"
            );
            Console.WriteLine("Press any key to continue...");
            string folderName = @"c:\Top Folder";
            string path1 = Path.Combine(folderName, "File Folder");
            Directory.CreateDirectory(path1);
            if (Directory.Exists(path1)) {
                for (int i = 1; i <= 5; i++) {
                    string fileName = "file" + i + ".dat";
                    string filePath = Path.Combine(path1, fileName);
                    File.Create(filePath).Dispose();
                }
            }
            Console.ReadKey();
            Console.Clear();
            Console.Write("Press Y/y if you want to begin  ");
            string c = Console.ReadLine();
            Console.Clear();
            var rC = new Random();
            int sP = 0;
            if (c == "Y" || c == "y") {
                sP = rC.Next(1, 4);
                if (sP == 1) {
                    goto sequenceOne;
                } else if (sP == 2) {
                    goto sequenceTwo;
                } else {
                    goto sequenceThree;
                }
            } else {
                Console.WriteLine(
                    "Press Y/y if you want to begin.\nPress any key to continue"
                );
                Console.ReadKey();
                Console.Clear();
                goto beginning;
            }
            sequenceOne: var stringChars = new char[26];
            var random = new Random();
            var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            for (int i = 0; i < stringChars.Length; i++) {
                stringChars[i] = chars[random.Next(chars.Length)];
            }
            string string1 = new string(stringChars);
            File.WriteAllText(@"C:\Top Folder\File Folder\file1.dat",
                string1);
            using(StreamReader sr = File.OpenText(@
                "C:\Top Folder\File Folder\file1.dat")) {
                string s = "";
                while ((s = sr.ReadLine()) != null) {
                    Console.WriteLine(s);
                    Console.WriteLine("file1.dat is a clean file");
                    Console.WriteLine("Path to file1.dat - {0}", path1);
                }
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
                goto end;
            }
            sequenceTwo: var stringChars2 = new char[26];
            var random2 = new Random();
            var chars2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZxxxxx";
            for (int i = 0; i < stringChars2.Length; i++) {
                stringChars2[i] = chars2[random2.Next(chars2.Length)];
            }
            string string2 = new string(stringChars2);
            string2 = string2.Replace("x", "\"VIRUS\"");
            File.WriteAllText(@"C:\Top Folder\File Folder\file2.dat",
                string2);
            using(StreamReader sr = File.OpenText(@
                "C:\Top Folder\FIle Folder\file2.dat")) {
                string s = "";
                while ((s = sr.ReadLine()) != null) {
                    Console.WriteLine(s);
                    Console.WriteLine(
                        "file2.dat is a HIGH THREAT virus file");
                    Console.WriteLine("Path to file2.dat - {0}\n",
                        path1);
                }
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
                goto end;
            }
            sequenceThree: var stringChars3 = new char[26];
            var random3 = new Random();
            var chars3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZx";
            for (int i = 0; i < stringChars3.Length; i++) {
                stringChars3[i] = chars3[random3.Next(chars3.Length)];
            }
            string string3 = new string(stringChars3);
            string3 = string3.Replace("x", "\"VIRUS\"");
            File.WriteAllText(@"C:\Top Folder\File Folder\file3.dat",
                string3);
            using(StreamReader sr = File.OpenText(@
                "C:\Top Folder\File Folder\file3.dat")) {
                string s = "";
                while ((s = sr.ReadLine()) != null) {
                    Console.WriteLine(s);
                    Console.WriteLine(
                        "file3.dat is a MODERATE THREAT virus file"
                    );
                    Console.WriteLine("Path to file3.dat - {0}\n",
                        path1);
                }
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
                goto end;
            }
            end: Console.WriteLine("\nDo you want to try again?Y/N");
            string end = Console.ReadLine();
            if (end == "Y" || end == "y") {
                Console.Clear();
                goto beginning;
            } else {
                Console.Clear();
                Console.WriteLine("Goodbye...Press any key to exit");
                Console.ReadKey();
            }
        }
    }
}

您的代码可以被复制和粘贴,而这永远不应该是您的第一个想法,例如,这是您生成字符串的全部操作,因此您可以在每个序列中调用此代码

private string GenerateString(int idx)
{
    var stringChars = new char[26];
    var random = new Random();
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for (int i = 0; i < stringChars.Length; i++) {
        stringChars[i] = chars[random.Next(chars.Length)];
    }
    return new string(stringChars);
}
//Example call (for sequence one) = string1 = GenerateString(1);

您应该查找switch语句,并找出一种方法来摆脱goto语句。

请注意您文章的格式。当你发帖的时候会有一个预览,当然这不是你想要的问题的样子。。。每行代码之间真的有3行或4行空行吗?我强烈怀疑你没有。直接从Visual Studio中复制并粘贴代码,高亮显示所有代码,然后按Ctrl-K,人们将更容易帮助您。学习设置代码格式。在每行加上4个空格,然后在代码上加上空格。这将使格式变得很好。如果你一直这样问,不要期望得到任何答案。你对goto的自由使用使得逻辑有点难以理解,更不用说重构了。你应该将代码拆分为单独的短方法,而不是使用goto。为每个逻辑步骤,特别是可能仅在参数值上不同的任何重复步骤创建一个方法。一旦你这样做了,你可以更容易地优化这些简短的方法。这个问题应该张贴在我没有复制粘贴任何人的代码,谢谢你的帮助!我会研究你说的话。。我知道我写的东西很长;我来这里的唯一原因是:D@Airynd-在我看来,你复制并粘贴了自己的代码,3次。。。不用担心,goto是一个非常古老的关键词,后来被更好的做事方式所取代。这是有争议的,但我坚定地站在永远不使用这个关键词的一边
private void WriteFile(int idx, string inputString ,string threatLevel)
{
    File.WriteAllText(@"C:\Top Folder\File Folder\file2.dat", inputString);
    string filePath = Path.Combine(@"C:\Top Folder\FIle Folder", 
                                     string.Format("file{0}.dat", idx));
    using(StreamReader sr = File.OpenText(filePath))
    {
        string s = "";
        while ((s = sr.ReadLine()) != null) {
            Console.WriteLine(s);
            Console.WriteLine("file{0}.dat is a {1} file", idx, threatLevel);
            Console.WriteLine("Path to file{0}.dat - {1}\n", idx, filePath);
        }
        Console.WriteLine("Press any key to continue...");
        Console.ReadKey();
    }
}
//WriteToFile(1, string1, "clean");
//WriteToFile(2, string2, "HIGH THREAT virus");
//WriteToFile(3, string2, "MODERATE THREAT virus");