使用C#4.0,有沒有辦法允許一個方法(而不是創建一個重載)接受一個字符串或一個int,然後讓我來檢測傳入的類型?如何讓一個方法接受一個字符串或int?
1
A
回答
15
由於您使用C#4.0中,你可以寫一個generic method。例如:
void MyMethod<T>(T param)
{
if (typeof(T) == typeof(int))
{
// the object is an int
}
else if (typeof(T) == typeof(string))
{
// the object is a string
}
}
但是你應該認真考慮這是否是一個好主意。上面的例子有點代碼味道。實際上,泛型的全部點是通用。如果必須根據傳入的對象的類型對代碼進行特殊處理,那麼應該使用重載的符號。那樣,每個方法重載處理其獨特的情況。我無法想象這樣做會有什麼不利之處。
4
當然可以!這方面的一個例子是
public void MyMethod(object o)
{
if (o.GetType() == typeof(string))
{
//Do something if string
}
else if (o.GetType() == typeof(int))
{
// Do something else
}
}
1
你可以在一些包裝與標誌接口包裹串和INT,並將它們傳遞給方法。
像這樣的事情
interface IMyWrapper<T> { T Value {get; }}
public class StringWrapper: IMyMarker<string> { ... }
public class IntWrapper: IMyMarker<int> { ... }
void MyMethod<T>(IMyWrapper<T> wrapper)
{
}
1
我想一個方法重載將是一個簡單的解決方案,如果你想遠離的東西走像反射或檢查的類型。
public void MethodName(string foo)
{
int bar = 0;
if(int.tryparse(foo))
return MethodName(bar);//calls int overload
}
相關問題
- 1. 遞歸方法接受兩個參數:一個字符串S和一個intñ
- 2. 創建一個接受字符串格式的方法Cocoa
- 3. 接受和打印一個字符串
- 4. 我不能讓NSURL接受一個字符串
- 5. 用一個int和一個字符串連接一個字符並不奇怪
- 6. 如何創建一個可以接受三個字符串數組的字符串寧靜方法
- 7. 如何讓一個Python字符串數
- 8. 有一個字符串或int與一個屬性綁定
- 9. 我如何添加一個int到一個字符串
- 10. 如何返回一個int和一個字符串?
- 11. 從一個字符串中解析一個int的算法
- 12. textbox一次只接受一個字符
- 13. 字符串字節爲一個int
- 14. 傳遞字符串從一個方法到另一個方法
- 15. 如何讓一個循環繼續向下一個字符串?
- 16. 添加兩個int字符連成一個字符數組或字符串
- 17. 從自定義字符串方法返回一個Int數組?
- 18. 如何從一個方法傳遞一個字符串變量主要方法
- 19. 如何添加一個字符串和int並按int排序
- 20. 字符串分割到兩個陣列一個int和一個字符串
- 21. 如何將一個int鏈接到一個字符串數組中的字符串java
- 22. VB.NET - 如何讓文本框只接受每個按鍵一個字符?
- 23. Excel:我如何將一個字符串和一個int整合到一個
- 24. 如何從一個字符串解析一個hex-int到一個Integer?
- 25. Excel:如何連接一個數字和一個字符串
- 26. 如何讓所有的靜態字符串在一個地方
- 27. INT()參數必須是一個字符串,一個類字節對象或數量,而不是「方法」
- 28. 如何只接受一個字符串與Java中的某些字符
- 29. 如何連接一個字符串與一個常量字符串?
- 30. 單一方法接受3個參數或4個參數
這正是重載方法的用途。你爲什麼反對使用它們? – 2011-02-05 15:24:51
同意科迪。它可以完成,但是我不能以一種非常漂亮的方式完成。我和科迪在下面都有兩個建議,但它確實不是一個很好的方法。 – Bebben 2011-02-05 15:34:57
謝謝科迪。我並不反對他們,我只是想確保我不會錯過4.0中的一個簡單的新功能,可以實現這一點。既然現在可以做可選的命名類型,我想也許有一種新的乾淨的方式來做到這一點。謝謝! – user390480 2011-02-05 15:42:02