0

给定以下代码:

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

VS 在第二行加下划线“属性”并告诉我找不到类型或命名空间。为什么?我已经尝试过using System.Reflection在顶部使用和不使用并得到相同的结果。

我可以通过使用来解决它Convert.ChangeType(id, property.PropertyType),但我很好奇 C# 规范如何使之前的代码无效。

4

2 回答 2

1

您正在尝试通过仅在执行时才知道的东西进行投射。C# 不能那样工作。强制转换的类型部分不是“计算为Type引用的表达式” - 它是类型或类型参数的名称

目前尚不清楚您要在这里实现什么,但是您将无法通过这样的铸造来做到这一点。你期望的编译时类型temp是什么?您是否知道这var只是编译时类型推断,而不是动态类型?

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

于 2012-05-22T15:17:27.480 回答
0

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

public class property
{
    public class PropertyType
    {

    }
}

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

于 2012-05-22T15:17:35.353 回答