我知道这里已多次讨论过,我已尝试将变量设置为公共等,但我似乎无法在其他名称空间中使用它。如果你能给我一些提示,我会很感激(我是C#的菜鸟) 我尝试从其他名称空间访问的字符串是" stringatlinei"
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Security;
using System.Security.Cryptography;
using System.IO;
using System.Net;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Net.Mail;
using ConsoleApplication32;
namespace ConsoleApplication32
{
public class Program
{
static void Main(string[] args)
{
DirSearch(@"C:\\Users\\");
Console.ReadKey();
}
static void DirSearch(string dir)
{
try
{
foreach (string d in Directory.GetDirectories(dir))
{
Console.WriteLine(d);
DirSearch(d);
// Compose a string that consists of three lines.
string lines = d;
// Write the string to a file.
System.IO.StreamWriter file = new
System.IO.StreamWriter("c:\\users\\chris\\desktop\\test.txt", true);
file.WriteLine(lines);
file.Close();
var oldLines = System.IO.File.ReadAllLines("c:\\users\\chris\\desktop\\test.txt");
var newLines = oldLines.Where(line => !line.Contains("Windows"));
System.IO.File.WriteAllLines("c:\\users\\chris\\desktop\\test.txt", newLines);
var oldLines4 = System.IO.File.ReadAllLines("c:\\users\\chris\\desktop\\test.txt");
var newLines4 = oldLines.Where(line => !line.Contains("$Recycle.Bin"));
System.IO.File.WriteAllLines("c:\\users\\chris\\desktop\\test.txt", newLines4);
var oldLines7 = System.IO.File.ReadAllLines("c:\\users\\chris\\desktop\\test.txt");
var newLines7 = oldLines.Where(line => !line.Contains("Program Files"));
System.IO.File.WriteAllLines("c:\\users\\chris\\desktop\\test.txt", newLines7);
var oldLines8 = System.IO.File.ReadAllLines("c:\\users\\chris\\desktop\\test.txt");
var newLines8 = oldLines.Where(line => !line.Contains("Program Files (x86)"));
System.IO.File.WriteAllLines("c:\\users\\chris\\desktop\\test.txt", newLines8);
var oldLines9 = System.IO.File.ReadAllLines("c:\\users\\chris\\desktop\\test.txt");
var newLines9 = oldLines.Where(line => !line.Contains("AppData"));
System.IO.File.WriteAllLines("c:\\users\\chris\\desktop\\test.txt", newLines9);
}
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
var lineCount = File.ReadLines(@"c:\\users\\chris\\desktop\\test.txt").Count();
Console.WriteLine(lineCount);
Console.ReadLine();
int element = 0;
for (int i = 0; i < lineCount + 1; i++)
{
element = element + 1;
String stringAtLinei = File.ReadLines("c:\\users\\chris\\desktop\\test.txt").ElementAtOrDefault(element);
Console.WriteLine(stringAtLinei);
}
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "random command example thing";
process.StartInfo = startInfo;
process.Start();
}
}
}
然后是其他名称空间等。
答案 0 :(得分:0)
&#34; stringatlinei&#34;它不是属性,也不是公共的任何东西,它是在函数内部的循环中定义的。
尝试公共静态字符串stringatlinei =&#34;&#34;,然后在循环中分配。
答案 1 :(得分:0)
无法在另一个命名空间中访问该变量。您应该阅读基础知识,特别是范围,以了解为什么会这样。这是一篇有用的文章:https://msdn.microsoft.com/en-us/library/aa691132(v=vs.71).aspx
基本上,您尝试访问的变量是在for
循环内创建的。循环的每次迭代都会消失。
答案 2 :(得分:0)
这是你应该改变的部分:(我为了清楚起见删除了其余部分)
namespace ConsoleApplication32
{
public class Program
{
public String stringAtLinei;
static void DirSearch(string dir)
{
for (int i = 0; i < lineCount + 1; i++)
{
stringAtLinei = File.ReadLines("c:\\users\\chris\\desktop\\test.txt").ElementAtOrDefault(element);
}
}
}
}
关键是你可以访问类的字段和属性,但不能访问局限于它们所在方法的变量。所以我将变量更改为类中的字段。