簡體   English   中英

C#切換類的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM