簡體   English   中英

如何在C#中傳遞字符串?

[英]How do you pass strings in C#?

如何在C#中傳遞字符串?

在用C#編寫的程序中,如何將字符串變量作為參數傳遞給方法/過程/函數?

SomeFunction("arg1", "arg2");

或作為變量:

string arg1 = "some value 1";
string arg2 = "some value 2";
SomeFunction(arg1, arg2);

字符串類是不可變的 因此,您不能執行以下操作:

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;
}

您的意思是這樣的:

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

然后像這樣調用:

string testString = "Here is some text";
if (SomeMethod(testString))
{
   // do stuff
}
string theString = "These are the contents";
SomeOtherFunction(theString);

只是好奇是否由於其他語言(例如Delphi)中的字符串處理而問這個問題?

C#中的字符串是不可變的(正如其他人所說的),因此對字符串的任何更改都會為“新”字符串分配內存,而“舊”字符串最終將被垃圾回收。 這意味着編譯器將不會生成代碼,以確保在方法返回時(或其中任何很酷的東西),引用計數都會減少。

您也可以通過引用傳遞它(請參見示例6

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

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

但是,如果您要在方法內部更改字符串,則不會有太大區別(因為字符串是不可變的)。 如果計划對傳遞的字符串進行大量更改,則最好使用StringBuilder IMO。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM