如何将实体转换为列表

How to Convert a Entity to a List

我有一个只有布尔属性的实体:

namespace MyProject.Entities
{
    public class MyEntity
    {
        
        public bool Bool2 { get; set; }
        public bool Bool2 { get; set; }
        public bool Bool2 { get; set; }

    }
}

现在我想这样做:

using MyProject.Entities
namespace MyProject
{
    public class Program
    {

        public static void Main(string[] args)
        {
            MyEntity myEntity = new MyEntity()
            {
                Bool1=true,
                Bool2=false,
                Bool3=false
            }
            List<bool> Bool = myEntity.ToList(); //this doesn't run!
        }
    }
}

我首先需要它作为模型,当然我在 asp.net 核心 mvc 中工作,我从剃刀页面获得这个模型。但现在我需要它作为一个列表来检查每个道具。 谁能帮帮我?

我需要的输出是一个包含这三个布尔值的列表

这就是我在评论中所说的内容。首先是 class(具有 不同的 属性 名称 - 它会编译)。我添加了一个 ToBoolList 方法。

public class MyEntity
{
    public bool Bool1 { get; set; }
    public bool Bool2 { get; set; }
    public bool Bool3 { get; set; }

    public List<bool> ToBoolList()
    {
        return new List<bool> { Bool1, Bool2, Bool3 };
    }
}

要对此进行测试,运行:

var testEntity = new MyEntity { Bool1 = true, Bool2 = false, Bool3 = true };
var boolList = testEntity.ToBoolList();

它将 return 一个包含 truefalsetrue.

List<bool>

要用反射来做,首先你需要得到 MyEntity 的类型,然后是它的 public 实例属性,过滤后只有 bool 是 return编辑。最后,下面的代码获取每个 属性 的 GetMethod 并在对象上调用它。

var testEntity = new MyEntity { Bool1 = true, Bool2 = false, Bool3 = true };
var entType = typeof(MyEntity);
var entProps = entType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
var boolProps = entProps.Where(p => p.PropertyType == typeof(bool) && p.CanRead);
var boolReflectList = boolProps.Select(p => p.GetGetMethod().Invoke(testEntity, null)).Cast<bool>().ToList();

它还 return 是一个包含 truefalsetrueList<bool>。第一个示例应该执行得更快。

您可以尝试使用以下代码:

public static void Main(string[] args)
        {
            MyEntity myEntity = new MyEntity()
            {
                Bool1=true,
                Bool2=false,
                Bool3=false
            }
            List<bool> Bool = myEntity.GetType().GetProperties().Select(s=>s.GetValue(myEntity)).ToList();
        }

结果: