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