Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从反射到在c#中列出的动态属性_C# - Fatal编程技术网

从反射到在c#中列出的动态属性

从反射到在c#中列出的动态属性,c#,C#,我想将以下内容转换为列表。我已经使用反射获取了属性,但是如何将它们转换为list(在我的例子中,这是实体对象DBSet) 我需要结果作为列表 ClassObject.GetType().GetProperty(classname) //After getting property I need it in .ToList() 您可以使用这样的函数进行转换 如果反射对象不可枚举,则无法转换 public static List<T> ConvertMysteriousObjectTo

我想将以下内容转换为列表。我已经使用反射获取了属性,但是如何将它们转换为list(在我的例子中,这是实体对象DBSet)

我需要结果作为列表

ClassObject.GetType().GetProperty(classname) //After getting property I need it in .ToList()

您可以使用这样的函数进行转换

如果反射对象不可枚举,则无法转换

public static List<T> ConvertMysteriousObjectToList<T>(object input)
{
    var enumerable = input as IEnumerable;
    if (enumerable == null) throw new InvalidOperationException("The object is not convertible to a list.");
    return enumerable.Cast<T>().ToList();
}
公共静态列表对象列表(对象输入)
{
var enumerable=输入为IEnumerable;
如果(enumerable==null)抛出新的InvalidOperationException(“该对象无法转换为列表”);
返回可枚举的.Cast().ToList();
}
如果您试图转换某种风格的DbSet(例如a
DbSet
),那么您可以这样称呼它:

var o = ClassObject.GetType().GetProperty(classname);
var list = ConvertMysteriousObjectToList<Foo>(o);
var o=ClassObject.GetType().GetProperty(classname);
var list=convertousObjectToList(o);
如果您不知道类型:

var list = ConvertMysteriousObjectToList<object>(o);
var list=convertousObjectToList(o);

var list=convertousObjectToList(o);
我得到了我想要的

static IEnumerable GetAllMembers(DbContext db, string dbSetName)
        {
            var pi = db.GetType().GetProperty(dbSetName);
            return (IEnumerable)pi.GetValue(db);
        }
资料来源:

为什么您想要一个包含单个元素的列表?您在转换什么?嗨,我在编译时没有“Foo”。那么我想您需要一个
列表
列表
。我提供的代码仍然适用于这些类型。
static IEnumerable GetAllMembers(DbContext db, string dbSetName)
        {
            var pi = db.GetType().GetProperty(dbSetName);
            return (IEnumerable)pi.GetValue(db);
        }