传入枚举作为方法参数

问题描述 投票:0回答:5

我已经声明了一个枚举:

public enum SupportedPermissions
{
    basic,
    repository,
    both
}

我也有一个这样的POCO:

public class File
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public SupportedPermissions SupportedPermissions { get; set; }      
}

现在我想创建一个方法,我可以用它来创建一个新的 File 对象:

public string CreateFile(string id, string name, string description, Enum supportedPermissions)
{
    file = new File
    {  
        Name = name,
        Id = id,
        Description = description,
        SupportedPermissions = supportedPermissions.basic
    };

    return file.Id;
}

如何为枚举创建参数以及如何像在伪代码中那样分配该参数

SupportedPermissions = supportedPermissions.basic
以便我的 File 实例设置了 SupportedPermissions?

c# enums
5个回答
57
投票

更改

CreateFile
方法的签名以期望
SupportedPermissions
值而不是普通的 Enum。

public string CreateFile(string id, string name, string description, SupportedPermissions supportedPermissions)
{
    file = new File
    {  
        Name = name,
        Id = id,
        Description = description,
        SupportedPermissions = supportedPermissions
    };

    return file.Id;
}

然后,当您调用方法时,您将

SupportedPermissions
值传递给您的方法

  var basicFile = CreateFile(myId, myName, myDescription, SupportedPermissions.basic);

7
投票

如果你想传入要使用的值,你必须使用你声明的枚举类型并直接使用提供的值:

public string CreateFile(string id, string name, string description,
              /* --> */  SupportedPermissions supportedPermissions)
{
    file = new File
    {  
        Name = name,
        Id = id,
        Description = description,
        SupportedPermissions = supportedPermissions // <---
    };

    return file.Id;
}

如果您想使用固定值,则根本不需要任何参数。相反,直接使用枚举值。语法类似于类的静态成员:

public string CreateFile(string id, string name, string description) // <---
{
    file = new File
    {  
        Name = name,
        Id = id,
        Description = description,
        SupportedPermissions = SupportedPermissions.basic // <---
    };

    return file.Id;
}

6
投票

首先将方法参数

Enum supportedPermissions
更改为
SupportedPermissions supportedPermissions

然后像这样创建你的文件

file = new File
{  
    Name = name,
    Id = id,
    Description = description,
    SupportedPermissions = supportedPermissions
};

对你的方法的调用应该是

CreateFile(id, name, description, SupportedPermissions.basic);

0
投票
public string CreateFile(string id, string name, string description, SupportedPermissions supportedPermissions)
{
    file = new File
    {  
       Name = name,
        Id = id,
        Description = description,
        SupportedPermissions = supportedPermissions
    };

    return file.Id;
}

0
投票
 public static class Program
 {
     public enum MyEnums
     {
         [Description("January")]
         One = 1,
         [Description("February")]
         Two = 2,
         [Description("March")]
         Three = 3,
         [Description("April")]
         Four = 4,
     }

     static void Main(string[] args)
     {
         var dictionary = GetDropDownValues(typeof(MyEnums));

         dictionary.ToList().ForEach(x => Console.WriteLine($"{x.Key} - {x.Value}"));
     }

     public static Dictionary<int, string> GetDropDownValues(Type @enum)
     {
         var dictionary = new Dictionary<int, string>();
         foreach (var item in Enum.GetValues(@enum))
         {
             dictionary.Add((int)item, GetDescription((Enum)item));
         }

         return dictionary;
     }

     public static string GetDescription(this Enum value)
     {
         FieldInfo fieldInfo = value.GetType().GetField(value.ToString());
         if (fieldInfo == null)
         { 
             return null;
         }

         var attribute = (DescriptionAttribute)fieldInfo.GetCustomAttribute(typeof(DescriptionAttribute));

         return attribute.Description;
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.