2016-08-02 136 views
0

我查過了(可能還不夠),但找不到答案。C#:有沒有辦法將一個枚舉作爲參數傳遞?

我想做一個通用函數,我可以通過任何枚舉來使用CheckedListBox(獲取或設置值)。

public enum TypeFlags 
{ 
    None = 0x0, 
    //List of flag 
} 

private void makeFlagOrBitmask(CheckedListBox list, Type e) 
{ 
    int myFlags = 0x0; 

    //I want to achieve something like that 
    foreach (Object item in list.CheckedItems) 
    { 
     //(TypeFlags)Enum.Parse(typeof(TypeFlags), item); 
     //So e should be the enum himself, but i can't figure how to do that 
     myFlags += (int)((e)Enum.Parse(typeof(e), item.tostring())); 
    } 
} 

所以,我可以使用一個函數來製作/讀取任何標誌。

問題是,我不知道如何通過枚舉,因爲我需要在函數中。

+0

出了什麼問題? – MasterXD

+0

刪除typeof(e)並離開Enum.Parse(e ...因爲e已經是一個類型了嗎? – Andez

+0

'typeof(e)'當'e'是'Type'就是給你'Type'的類型對象,而不是枚舉類型,你只需要將'e'傳遞給'Enum.Parse'。 – juharr

回答

-1

你想改變這一行:

myFlags += (int)((e)Enum.Parse(typeof(e), item.tostring())); 

進入這個:

myFlags += (int)((e)Enum.Parse(e, item.tostring())); 

由於e已經是一個類型。至於如何通過參數:

makeFlagOrBitmask(myCheckBoxList, typeof(myEnum)); 

我希望這有助於。

編輯:

爲了確保只有枚舉將工作,將它添加到您的函數的頂部:

if (!e.IsEnum) 
    return; 
+0

這允許你傳遞非枚舉類型。 – Servy

+0

這就是我所需要的,就像我上面所說的那樣。謝謝 ! –

+0

@SiveurWesttunger太好了,我做了一個編輯,所以檢查一下。另外,你能接受我的答案嗎?那簡直太好了。謝謝。 – MasterXD

0

可能是不完整的,但它聽起來像你需要一個通用的枚舉迭代器。我從Create Generic method constraining T to an Enum

public T GetEnumFromString<T>(string value) where T : struct, IConvertible 
{ 
    if (!typeof(T).IsEnum) 
    { 
     throw new ArgumentException("T must be an enumerated type"); 
    } 

    //... 
} 
0

我知道這是不是一個很好的代碼拿起下面的代碼,但是這個工作對我來說:

如果該方法需要一個對象,而不是一個類型(也許你可以做到這一點一種類型)你可以這樣做:

if (e.GetType() == typeof(ImageType)) 
    { 
     ValueArray = GetEnumArray(ImageType.Bmg); 
    } 

這樣你可以檢查什麼枚舉它在你做某事之前。

我希望這可以幫助你。

相關問題