2016-03-07 74 views
1

我想添加Object爲許多類型。我有搜索這個特定的問題,但我無法找到任何幫助,在這種情況下。假設我有一個有很多種類,其中有一個按鈕單擊事件定義如下許多類型C的數組集合#

object[] InvokeParam = null; 
    private void btnCall_Click(object sender, EventArgs e) 
    { 
     string t = ""; 
     int t1 = 0; 
     float t2 = 0.2; 
     InvokeParam = new object[3]; 
     string type = RecognizeType(t.GetType(),0); 
     string type1 = RecognizeType(t1.GetType(), 1); 
     string type2 = RecognizeType(t2.GetType(), 2); 
    } 

和RecognizeType功能

private string RecognizeType(Type type,int Index) 
    { 
     string typename = ""; 

     if (type.Equals(typeof(string))) 
     { 
      //InvokeParam[Index] = type as string; 
      typename = "String"; 
     } 
     else if (type.Equals(typeof(int))) 
     { 
      typename = "Int"; 
     } 
     else if (type.Equals(typeof(double))) 
     { 
      typename = "Double"; 
     } 
     else if (type.Equals(typeof(Single))) 
     { 
      typename = "Single"; 
     } 
     else if (type.Equals(typeof(float))) 
     { 

      typename = "Float"; 
     } 
     else if (type.Equals(typeof(decimal))) 
     { 
      typename = "Decimal"; 
     } 
     else 
     { 
      typename = "Another Type"; 
     } 

     return typename; 
    } 

我想在數組作爲特殊類型的每一個對象。如果第一個字符串是字符串類型,那麼它可以將該對象的索引作爲字符串,所以無論何時由用戶輸入任何值,當輸入除字符串之外的其他值時都會拋出異常。

+0

可否請你改一下這個問題,你想會發生什麼。我假設你應該使用動態而不是對象 – misha130

+0

我想創建多個類型的對象,背後的原因是每次我想調用運行時的所有方法,我正在處理它們的參數類型,因爲它們包含許多類型,這就是爲什麼我想要多種類型的數組集合 –

+1

「多種類型的數組集合」:在這裏沒有其他人在考慮匿名類型嗎?不知道這是否適合你的目標。 – C4u

回答

2

如果我正確理解你的問題 - 你希望設置數組中的每個值與一個初始類型,然後只允許在該位置的類型。

我覺得這個問題可以用一個簡單的類來解決:

public class TypeMapper 
{ 
    public readonly Type Type; 
    object _value; 
    public object Value 
    { 
     get { return _value; } 
     set 
     { 
      // If Type is null, any type is permissable. 
      // Else check that the input value's type matches Type. 
      if (Type == null || value.GetType().Equals(Type)) 
       _value = value; 
      else 
       throw new Exception("Invalid type."); 
     } 
    } 

    static Dictionary<string, Type> _types = new Dictionary<string, Type>() 
    { 
     { "string", typeof(string) }, 
     { "int", typeof(int) }, 
     { "double", typeof(double) }, 
    }; 

    public TypeMapper(string type) 
    { 
     // If 'type' is not described in _types then 'Type' is null 
     // - any type is permissable. 
     _types.TryGetValue(type, out Type); 
    } 
} 

然後,您可以使用這個類,如下所示:

object[] InvokeParam = new TypeMapper[2]; 
InvokeParam[0] = new TypeMapper("string"); 
(InvokeParam[0] as TypeMapper).Value = "Hello World"; // Ok 
(InvokeParam[0] as TypeMapper).Value = 123; // Throws exception. 
InvokeParam[1] = new TypeMapper("double"); 
(InvokeParam[1] as TypeMapper).Value = 123.456; // Ok 
(InvokeParam[1] as TypeMapper).Value = false; // Throws exception. 
+0

可以接受的答案。我也想嘗試像 InvokeParam [Index] = InvokeParam [Index] as int; 爲什麼不工作? –

+0

嘗試'InvokeParam [Index1] .Value = InvokeParam [Index2] .Value;' – TVOHM