c# - 将 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]被传入,以便它可以从对象返回该属性。
同样,我觉得这是不可能的,只是想在继续之前检查一下。
再次感谢,
解决方案
通过允许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 的提议代码中。这些应该如何处理尚不清楚,因为当我使用FirstOrDefault
kind of 时将null
s 带入了范围不一定期望他们)
推荐阅读
- python - 如何在 Brier 分数上优化提升树以进行分类?
- r - 如何在 Rshiny 中提供数据?
- sql-server - SSIS - 每个循环的 OLE Db 目标连接错误
- php - 在浏览器中显示来自 SQLite 查询的信息
- unit-testing - TypeError: Function.prototype.name sham getter 仅在我使用 `--coverage` 运行时在非函数上调用
- java - 为什么 Google App Engine JDBC 连接 URL 不起作用?
- node.js - 回调错误:TypeError:无法读取未定义的属性“行”
- c++ - 如何查找结构字段占用的空间以及它与下一个字段之间的填充?
- python - 使用 python 更改字符串的编码时出错。UTF-8 和 cp1252
- mongodb - Mongodb 查询执行耗时过长