给出以下代码:
var property = typeof(TEntity).GetProperty("Id");
var temp = (property.PropertyType)id;
VS在第二行中强调“属性”并告诉我无法找到类型或命名空间。为什么?我已尝试使用顶部和不使用using System.Reflection
并获得相同的结果。
我能够使用Convert.ChangeType(id, property.PropertyType)
解决这个问题,但我很好奇C#规范使前面的代码无效。
答案 0 :(得分:1)
你试图通过只在执行时知道的东西施放。 C#不能那样工作。演员表的类型部分不是“评估为Type
引用的表达式” - 它是类型或类型参数的名称。
目前尚不清楚你在这里想要达到的目标,但是你不可能通过这样的方式来做到这一点。您期望temp
的编译时类型是什么?您是否知道var
只是编译时类型推断,而不是动态类型?
如果您可以向我们提供有关您要实现的目标的更多信息,我们可能会为您提供更多帮助。
答案 1 :(得分:0)
它期望括号之间有一个类型(类型System.Type
不是变量,但实际类型),但是这种类型(property.PropertyType
)不存在。
为了证明这一点,请将其添加到您的代码中:
public class property
{
public class PropertyType
{
}
}
现在,编译器会满意,但这可能不是你想要做的。