[英]C# Switch For Types Of A Class
我有以下方法,它將一種類作為參數:
public void test(Type proType){
}
我目前有一個大的if else
看起來像:
if(proType == typeof(Class)){}
因為大約有十個看起來不整潔。
我嘗試將其轉換為開關但無法使其工作。
有沒有更好的做法可以讓這個或那個讓switch語句工作?
switch (proType)
{
case typeof(ClassName):
break;
}
“需要恆定值”
該函數被稱為test(typeof(class))
所以目標是我有一個包含許多小類的Big對象。
typeof(class)switch / if語句允許我決定進入哪個容器來獲取對象。
那么,如何讓你正在測試的所有對象共享一個共同的界面呢?
interface ITestable
{
void DoSomething();
}
並且每個對象以不同方式實現此接口
class MySomething : ITestable
{
public void DoSomething()
{
//type specific implementation
}
}
class MyOtherSomething : ITestable
{
public void DoSomething()
{
//type specific implementation
}
}
現在:
foreach(ITestable testable in myTestablesList)
{
testable.DoSomething();
}
並且所有切換邏輯都消失了。 田田!
你真正想要實現的目標是什么 ? 我猜這10次中的9次,當你切換某種物體的類型時,你的設計是有缺陷的。 在大多數情況下,虛擬調度或多態(或兩者)都是您真正需要的,但不知道您試圖解決的問題是什么,我不能肯定地說。
我通常使用Dictionary來為每種類型創建一個動作緩存; 如果預先知道類型,則在啟動時加載它,或者使用TryGetValue並在失敗時填充。
如果您感興趣的類型在TypeCode枚舉中,則可以使用switch(Type.GetTypeCode(proType))
。 例如,來自文檔 :
static void WriteObjectInfo(object testObject)
{
TypeCode typeCode = Type.GetTypeCode( testObject.GetType() );
switch( typeCode )
{
case TypeCode.Boolean:
Console.WriteLine("Boolean: {0}", testObject);
break;
case TypeCode.Double:
Console.WriteLine("Double: {0}", testObject);
break;
default:
Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject);
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.