Как вы передаете строки в C #? - PullRequest
1 голос
/ 01 апреля 2010

Как вы передаете строки в C #?

Как передать строковые переменные в качестве аргументов методу / процедуре / функции в программе, написанной на C #?

Ответы [ 5 ]

5 голосов
/ 01 апреля 2010

Класс строки неизменный . Таким образом, вы не можете сделать следующее:

private void MyFunction()
{
    string myMessage = "Just a message";
    ManipulateMessage(myMessage);

    Console.WriteLine(myMessage);
}

private void ManipulateMessage(string message)
{
    message = DateTime.Now + "   " + message;
}

Чтобы это сработало, вы должны вернуть строку:

private void MyFunction()
{
    string myMessage = "Just a message";
    myMessage = ManipulateMessage(myMessage);

    Console.WriteLine(myMessage);
}

private string ManipulateMessage(string message)
{
    return DateTime.Now + "   " + message;
}

Или используйте StringBuilder

private void MyFunction()
{
    StringBuilder myMessage = "Just a message";
    ManipulateMessage(myMessage);

    Console.WriteLine(myMessage.ToString());
}

private void ManipulateMessage(StringBuilder message)
{
    message.Insert(0, DateTime.Now + "   ");
}

Обновление после комментария от KMan

Хорошо, существует третья версия, использующая ключевое слово ref

private void MyFunction()
{
    string myMessage = "Just a message";
    ManipulateMessage(ref myMessage);

    Console.WriteLine(myMessage);
}

private void ManipulateMessage(ref string message)
{
    message = DateTime.Now + "   " + message;
}
5 голосов
/ 01 апреля 2010
SomeFunction("arg1", "arg2");

или как переменные:

string arg1 = "some value 1";
string arg2 = "some value 2";
SomeFunction(arg1, arg2);
2 голосов
/ 01 апреля 2010

Вы имеете в виду метод, подобный:

public bool SomeMethod(string inputString)
{
  // do stuff
  return true;
}

Тогда звоните как:

string testString = "Here is some text";
if (SomeMethod(testString))
{
   // do stuff
}
0 голосов
/ 01 апреля 2010

Просто любопытно, если вы задаете этот вопрос из-за обработки строк в других языках, таких как Delphi?

Строки в C # являются неизменяемыми (как уже говорили другие), поэтому любое изменение строки выделяет память для «нового», а «старый» в конечном итоге будет собираться мусором. Это означает, что компилятор не будет генерировать код, чтобы удостовериться, что счетчик ссылок уменьшается при возврате метода - или что-то в этом роде.

Вы также можете передать его по ссылке (см. пример 6 )

...
string myLittleString = "something";
PassToMe(ref myLittleString);
...

void PassToMe(ref string takenIn)
{ //some code here }

но это не будет иметь большого значения, если вы собираетесь изменить строку внутри метода (поскольку строки являются неизменяемыми). Если вы планируете внести много изменений в переданную строку, лучше использовать StringBuilder IMO.

0 голосов
/ 01 апреля 2010
string theString = "These are the contents";
SomeOtherFunction(theString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...