为什么这段代码告诉我无法找到类型或命名空间?

时间:2012-05-22 15:13:16

标签: c# reflection

给出以下代码:

var property = typeof(TEntity).GetProperty("Id");
var temp = (property.PropertyType)id;

VS在第二行中强调“属性”并告诉我无法找到类型或命名空间。为什么?我已尝试使用顶部和不使用using System.Reflection并获得相同的结果。

我能够使用Convert.ChangeType(id, property.PropertyType)解决这个问题,但我很好奇C#规范使前面的代码无效。

2 个答案:

答案 0 :(得分:1)

你试图通过只在执行时知道的东西施放。 C#不能那样工作。演员表的类型部分不是“评估为Type引用的表达式” - 它是类型或类型参数的名称

目前尚不清楚你在这里想要达到的目标,但是你不可能通过这样的方式来做到这一点。您期望temp的编译时类型是什么?您是否知道var只是编译时类型推断,而不是动态类型?

如果您可以向我们提供有关您要实现的目标的更多信息,我们可能会为您提供更多帮助。

答案 1 :(得分:0)

它期望括号之间有一个类型(类型System.Type不是变量,但实际类型),但是这种类型(property.PropertyType)不存在。 为了证明这一点,请将其添加到您的代码中:

public class property
{
    public class PropertyType
    {

    }
}

现在,编译器会满意,但这可能不是你想要做的。