[英]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 + " ");
}
好的,還有使用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.