按位或可变数量的数字 C#

本文关键字:数字 位或 | 更新日期: 2023-09-27 18:31:08

我正在使用MVC4框架为iTextSharp构建一个上传表单,但我在尝试将布尔值转换为按位整数时遇到了困难。

iTextSharp 提供的方法使用按位或组合多个参数,如下所示:

    PdfEncryptor.Encrypt(new PdfReader(
                    ms.ToArray()),
                    fs,
                    true, 
                    null, 
                    "Pw", 
                    PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_FILL_IN .......);

但是,我将模型定义为使用布尔属性,因此很容易挂接到 Web 窗体。

internal static class PermissionConstants
{
    public const int NumAllowAssembly = 1024;
    public const int NumAllowCopy = 16;
    public const int NumAllowDegradedPrinting = 4;
    public const int NumAllowFillIn = 256;
    public const int NumAllowModifyAnnotations = 32;
    public const int NumAllowModifyContents = 8;
    public const int NumAllowPrinting = 2052;
    public const int NumAllowScreenReaders = 512;
    public const int NumHideMenubar = 8192;
    public const int NumHideToolbar = 4096;
    public const int NumHideWindowUI = 16384;
}
public class Permissions
{
    public bool AllowAssembly { get; set; }
    public bool AllowCopy { get; set; }
    public bool AllowDegradedPrinting { get; set; }
    public bool AllowFillIn { get; set; }
    public bool AllowModifyAnnotations { get; set; }
    public bool AllowModifyContents { get; set; }
    public bool AllowPrinting { get; set; }
    public bool AllowScreenReaders { get; set; }
    //[System.ComponentModel.DefaultValue(true)]
    public bool HideMenubar { get; set; }
    //[System.ComponentModel.DefaultValue(true)]
    public bool HideToolbar { get; set; }
    //[System.ComponentModel.DefaultValue(true)]
    public bool HideWindowUI { get; set; }
    public Permissions()
    {
        HideMenubar = true;
        HideToolbar = true;
        HideWindowUI = true;
    }
}

现在的问题是将值从权限类发送到第一种方法。 我想制作一种生成正确数字的方法。 有谁知道如何做到这一点?可以只添加整数吗? 我认为这不会产生与按位或操作相同的数字。

按位或可变数量的数字 C#

您可以从一组 bool s 中构造 "flag" enum s 的组合,如下所示:

Permissions p = ...
var res = (p.AllowCopy   ? PdfWriter.ALLOW_COPY : 0)
        | (p.AllowFillIn ? PdfWriter.ALLOW_FILL_IN : 0)
        | // ...and so on.