如何将实体转换为列表
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 一个包含 true
、false
和 true
.
的 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 是一个包含 true
、false
和 true
的 List<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();
}
结果:
我有一个只有布尔属性的实体:
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 一个包含 true
、false
和 true
.
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 是一个包含 true
、false
和 true
的 List<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();
}
结果: