首页 > 解决方案 > 将 Type 定义为 Class.Properties 中的任何一个

问题描述

我想知道是否可以定义一个设置为对象(类)的任何属性的类型。在某种程度上,它的行为有点像枚举。

(X = 此 Data 类的属性,即 Data.Prop1 或 Data.Prop2)

public class Data
{
    public bool Prop1 { get; set; }
    public bool Prop2 { get; set; }

    public bool Add(X name)
    {
        return false;
    }
}

public class Test
{
    public Test()
    {
        Data d = new Data();
        d.Add(Data.Prop1);
    }
}

有没有办法做到这一点?我觉得没有,但我想我会问。

谢谢,

感谢大家试图理解。这是一些额外的说明(我会提到我认为这是不可能的)。

假设我有以下内容:

public class Student
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Grade { get; set; }
    public string Course { get; set; }
}

public class Faculty
{
    private List<Student> students;

    static public string GetValue(int id, [Student.Property] prop)
    {
        return students.Where(x => x.ID == id).FirstOrDefault().prop;
    }
}

然后,当您调用 Faculty.GetValue(1, [这将是一个类似于枚举的完成列表]) - 您可以选择一个并将其传递给函数,然后该函数以某种方式处理 [Property]被传入,以便它可以从对象返回该属性。

同样,我觉得这是不可能的,只是想在继续之前检查一下。

再次感谢,

标签: c#.netreflection

解决方案


通过允许Func<>传递 a 会更好:

public class Faculty
{
    private List<Student> students;

    static public T GetValue<T>(int id, Func<Student,T> prop)
    {
        return prop(students.Where(x => x.ID == id).FirstOrDefault());
    }
}

然后调用者只需通过x=>x.Prop1而不是您提出的Prop1. (当然,他们可以灵活地选择 lambda 以外的东西来指定Func<>

(这里有问题 ifStudent是一个引用类型,因为它在这里,并FirstOrDefault返回null,但同样的问题也存在于 OP 的提议代码中。这些应该如何处理尚不清楚,因为当我使用FirstOrDefaultkind of 时将nulls 带入了范围不一定期望他们)


推荐阅读