2016-09-09 3 views
0

может кто-нибудь мне помочь - я новичок в консольных приложениях C# и пытаюсь определить подпрограмму для замены строки текста в файле.Вызов подпрограммы в C#

я получаю сообщение об ошибке, хотя:

Error CS0119 'Program.Main(string[])' is a method, which is not valid in the given context SSReplace d:\users\mtait\documents\visual studio 2015\Projects\SSReplace\SSReplace\Program.cs

Спасибо за любую помощь,

Марк

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Text.RegularExpressions; 

namespace SSReplace 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     SSReplace.Program.Main.ReplaceInFiles("D:\\users\\mtait\\documents\\visual studio 2015\\Projects\\SSReplace\\test_fic_ISUK.txt", "Begin", "Begin2"); 
    } 

    /// <summary> 
    /// Replaces text in a file. 
    /// </summary> 
    /// <param name="filePath">Path of the text file.</param> 
    /// <param name="searchText">Text to search for.</param> 
    /// <param name="replaceText">Text to replace the search text.</param> 
    public void ReplaceInFiles(string filePath, string searchText, string replaceText) 
    { 
     StreamReader reader = new StreamReader(filePath); 
     string content = reader.ReadToEnd(); 
     reader.Close(); 

     content = Regex.Replace(content, searchText, replaceText); 

     StreamWriter writer = new StreamWriter(filePath); 
     writer.Write(content); 
     writer.Close(); 
    } 

} 
} 
+0

У вас есть пространство имен перепутали: 'ReplaceInFiles' не внутри' Main' - просто 'Program.ReplaceInFiles'will сделать. – Filburt

ответ

2

Вы должны отметить свой метод как статический:

public static void ReplaceInFiles 

Статический метод не может вызвать метод экземпляра, потому что не существует экземпляра Program.

Чтобы вызвать метод, просто используйте его имя ReplaceInFiles, так как оно находится в том же пространстве имен и в том же классе. Не нужно использовать полный SSReplace.Program.Main перед этим.

От C# Технические характеристики:

метод, объявленный со статическим модификатором является статическим методом. Статический метод не работает в конкретном экземпляре и может только напрямую получить доступ к статическим членам.

Метод, объявленный без статического модификатора, является методом экземпляра. Метод экземпляра работает с конкретным экземпляром и может обращаться к статическим и экземплярам как . Экземпляр, к которому был вызван метод экземпляра , может быть явно доступен. Это ошибка ссылается на это в статическом методе.

0

Во-первых: нет такого понятия, как подпрограмма в C#, подмигнули называется метод.

Второе: Способ (как и любой другой член) определяется в класса и, таким образом, относится к либо экземпляр этого класса или класса самого (static член). Таким образом, вместо того, чтобы написать это:

var p = new Program(); // create a new instance of Program 
p.ReplaceInFiles(myFile, "Begin", "Begin2"); // call the method on that instance 

Как you're уже в пространство имен SSReplace можно также опустить часть из вашего кода.

Альтернативно сделайте свой метод static. Тогда вы можете назвать это так:

Program.ReplaceInFiles(myFile, "Begin", "Begin2"); 

Обратите внимание, что не существует ни пространства имен, ни имя Main -метода. Однако даже Program -часть не является обязательным, что делает следующее действует также:

ReplaceInFiles(myFile, "Begin", "Begin2"); 
Смежные вопросы