我在静态void main中有一些代码,虽然我希望它从static void main调用startremdup方法(因为它调用RemoveDuplicate,带有适当的参数),我试过startremdup();
private void RemoveDuplicate(string sourceFilePath, string destinationFilePath)
{
var readLines = File.ReadAllLines(sourceFilePath, Encoding.Default);
File.WriteAllLines(destinationFilePath, readLines.Distinct().ToArray(), Encoding.Default);
}
private void startremdup(object sender, EventArgs e)
{
RemoveDuplicate("C:\test.txt", "C:\test2.txt");
}
答案 0 :(得分:13)
startremdup
是实例方法。这意味着你需要在它包含的任何类的实例上调用它。例如:
Foo foo = new Foo();
foo.startremdup(null, EventArgs.Empty);
就个人而言,它看起来应该是一个静态的方法 - 最好是一个更明智的名字 - 但这就是为什么它当时不起作用。
如果我是你,我实际上会放下你当前的任务,拿起一本好的C#入门书 - 了解静态和实例成员之间的区别等。
答案 1 :(得分:5)
将startremdup()
和RemoveDuplicate()
设为静态。
private static void RemoveDuplicate(string sourceFilePath, string destinationFilePath)
{
var readLines = File.ReadAllLines(sourceFilePath, Encoding.Default);
File.WriteAllLines(destinationFilePath, readLines.Distinct().ToArray(), Encoding.Default);
}
private static void startremdup(object sender, EventArgs e)
{
RemoveDuplicate("C:\test.txt", "C:\test2.txt");
}
答案 2 :(得分:2)
制作方法static
。
答案 3 :(得分:2)
答案 4 :(得分:1)
除非在对象引用上调用静态方法,否则不能从静态方法调用非静态方法。检查this。
答案 5 :(得分:1)
您需要将这两个方法都设置为静态,或者创建Main
类的实例并从中调用该方法。
答案 6 :(得分:1)
声明private static void startremdup(object sender, EventArgs e)
,因为静态方法无法调用实例方法,因为它们没有this
。