2017-09-12 21 views
1

我想使用'命名參數'功能作爲參數。使用'命名參數'選擇重載方法

有兩種方法。

Class temp { 
    public method(Class1 param); 
    public method(Class2 param); 
}; 

在上述類的情況下,如果我想調用使用'named arguments'的方法。我可以打電話給喜歡method(param: 'some value');,我想給null在「一些價值」,所以當我嘗試這樣,

method(param:null); 

我看到這則消息

的調用是以下的方法或之間的曖昧屬性: '方法'和'方法'

然後,我意識到這兩個(Class1,Class2)非常相似。

所以,當我嘗試投它這樣,

method((Class1)param:null); 

我失敗,下面的消息。

名稱「標識」不會在目前情況下

所以可以「投」這個「PARAM」參數存在嗎?

謝謝。

+0

你沒有嘗試什麼是字面上唯一的其他選擇安排這些標識符?準備10個答案都說在3,2,1 ... –

+0

@JeroenMostert有罪... – ediblecode

+0

@JeroenMostert哦,我明白了。我會盡量再次發現更多。謝謝:) – hyunsooPark

回答

1

你做這樣的:

MethodName(param: (Class1)null) 

基本上,你需要將null投射到您的指定類型,而不是參數

+0

非常感謝你:)我懂了! – hyunsooPark

0

爲什麼不單獨兩種方法?

  • 方法1(1類PARAM)

  • 方法2(等級2 PARAM)

或類似的東西:

public method<T>(T param) 
{ 
    if(param.GetType() == typeof(Class1)) 
    { 
     //Do stuff for Class1 
     Console.WriteLine("Class1"); 
    } 
    else if (param.GetType() == typeof(Class2)) 
    { 
     //Do stuff for Class2 
     Console.WriteLine("Class2"); 
    } 
} 
+0

我正在做關於這個類的單元測試,我想要的是在特定方法中使用「命名參數」時輸入值。而這個班不是我的。所以我不知道爲什麼這兩個分離..謝謝你的意見。 – hyunsooPark

+0

這是一個非常可怕的泛型使用 – ediblecode