2017-03-06 73 views
1

如下面的代碼表示,我想的someMethod有沒有可能是某種爲int的C#方法參數可以接受空和可更新參數

  • 有某種的參數INT
  • 可以接受null作爲參數
  • 如果參數是沒有空,它會使用它的值,然後在Caller2

    void Caller1() 
    { 
        SomeMethod(null, ...); 
    } 
    
    void Caller2() 
    { 
        int argument = 123; 
        SomeMethod(argument, ...); 
        Debug.Assert(argument == 456); 
    } 
    
    void SomeMethod(SomeKindOfInt parameter, ...) 
    { 
        if (parameter != null) 
        { 
         // use the value of parameter; 
         parameter = 456; // update the value of argument which is in Caller2 
        } 
    } 
    
更新參數變量的值

嘗試並宣佈:

  • 裁判INT不能接受空
  • 詮釋?無法更新呼叫者
  • 參數創建一個自定義包裝類int的這樣做,但有一個光路或做C#或.net在一些高科技打造?
  • ,因爲有一個大的邏輯中是常見的,只要參數爲空或返回null這不是很好的將它分爲兩​​種方法。
+2

爲什麼你不在你的方法中使用返回值? – Jehof

+1

'ref int?'怎麼樣? – dotctor

+0

@ Jehof,謝謝,int?參數和返回值一起解決我的問題 – zhiyazw

回答

2

快到了,你可以用int?允許空值ref關鍵字。

static void Main(string[] args) 
{ 
    int? test1 = null; 
    SomeMethod(ref test1); 
    Console.WriteLine(test1); 
    // Display 456 

    int? test2 = 123; 
    SomeMethod(ref test2); 
    Console.WriteLine(test2); 
    // Display 123 

    Console.ReadLine(); 
} 

static void SomeMethod(ref int? parameter) 
{ 
    if (parameter == null) 
    { 
     parameter = 456; 
    } 
} 
+0

謝謝,ref int?能做到這一點,但它不接受字面的someMethod(NULL,..),它需要像這樣調用:INT? unused = null; SomeMethod(引用未使用)。在我個人的情況下,我更喜歡Jehof的解決方案。不管怎樣,謝謝你。 – zhiyazw

相關問題