2010-06-14 71 views
2
SMSCOMMS SMSEngine = new SMSCOMMS("COM6"); 

該代碼似乎並不把我的論點COM6作爲有效的ref string。我該如何解決這個問題?我是否正確使用ref傳遞我的參數?

public class SMSCOMMS 
{ 
    public SMSCOMMS(ref string COMMPORT) 
    { 
    SMSPort = new SerialPort(); 
    SMSPort.PortName = COMMPORT; 
    SMSPort.BaudRate = 9600; 
    SMSPort.Parity = Parity.None; 
    SMSPort.DataBits = 8; 
    SMSPort.StopBits = StopBits.One; 
    SMSPort.Handshake = Handshake.RequestToSend; 
    SMSPort.DtrEnable = true; 
    SMSPort.RtsEnable = true; 
    SMSPort.NewLine = System.Environment.NewLine; 
    ReadThread = new Thread(
     new System.Threading.ThreadStart(ReadPort)); 
} 

回答

3

您無法通過臨時與ref,因爲被調用的方法必須能夠分配給調用者的變量。你爲什麼用它來開始?您從未分配到COMMPORT

爲什麼不乾脆:

public SMSCOMMS(string COMMPORT) 
2

沒有必要通過一項ref PARAM除非你打算修改實際變量調用者的傳遞。由於您的不能修改字符串文字(根據定義它是常量),因此無法通過引用傳遞。

+0

錯誤。你可以在字符串中使用'ref',並且有時候你想要。如果該方法分配給'ref'變量,則調用者現在在其自己的變量中引用一個不同的字符串。 – 2010-06-14 06:04:10

+0

我沒說字符串 - 我說string * literal *。如果您知道修改字符串文字的方法,讓.net人員知道它,導致它可能是一個錯誤。根據定義,文字是不變的。 「a」永遠不會是「a」。雖然它可以被另一個字符串替換,但這與修改字符串本身不同。 – cHao 2010-06-14 06:07:51

+0

除此之外,有問題的代碼顯然是傳遞一個字符串文本,而不是一個變量(閱讀:*沒有變量分配給*),我認爲*是顯而易見的,並且你有理由破壞。 – cHao 2010-06-14 06:19:51

1

當您傳遞具有可用引用的內容時,您只能使用ref。這意味着您必須首先聲明一個變量,然後通過ref傳遞該變量:

string comm = "COM6"; 
SMSCOMMS SMSEngine = new SMSCOMMS(ref comm);