2013-04-08 76 views
0
INT

在C#中,我有一個函數,它作爲一個參數是這樣一個int:轉換列表與邏輯OR值

searchValue = (int)(svcMembership.Request.Active | svcMembership.Request.Inactive); 

userClient.DelegateAccounts_Retrieve(searchValue); 

我有此列表提供選擇一個CheckBoxList的,我已經捕捉到了選擇作爲List<svcMembership.Request>svcMembership.Request是一個枚舉)的項目。

有沒有辦法將該列表轉換爲具有邏輯OR的整數,如第一個示例中所示?

+3

它們不是邏輯OR。他們是按位運算符。有一個非常大的差異! – Sebivor 2013-04-08 19:35:49

+0

你想達到什麼目的? – valverij 2013-04-08 19:38:50

+0

假設你有一個'svcMembership.Request'的列表,並且需要第一個|第2 | 3rd | 4,我想你可以使用linq:'list.Aggregate((a,b)=> a | b)'。哦,有人打我。 NVM。 – 2013-04-08 19:41:51

回答

1
using System.Linq; 

int searchValue = mySelectedEnumValues.Cast<int>().Aggregate(0, (a, b) => a | b); 

確保svcMembership.Request的值爲2的冪。

另外,請看Flags屬性。

+0

看起來不錯,但是VS告訴我:「Operator'|'不能被施加到型「INT」和svcMembership.Request」 – 2013-04-08 19:50:24

+0

這裏的操作數是枚舉: '公共枚舉請求 { 請求= 0×01, 主動= 0×02, 無效= 0×04, 拒絕= 0x08的 }' – 2013-04-08 19:51:37

+2

@DelfordChaffin使用'default(svcMembership.Request)',而不是使用'0'作爲種子。如果你想以int結尾,你需要將結果轉換爲int。 – Servy 2013-04-08 19:51:49

0

您是否考慮迭代checkbox_list.Items,並添加Selected並每乘以兩次迭代?

int checkbox_list_bits = 0; 
for (int x = 0; x < checkbox_list.Items.Count; x++) { 
    checkbox_list_bits *= 2; 
    if (checkbox_list.Items[x].Selected) { checkbox_list_bits++; } 
}