Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时强制转换为自定义对象_C#_Asp.net Core_Reflection_Razor Pages - Fatal编程技术网

C# 在运行时强制转换为自定义对象

C# 在运行时强制转换为自定义对象,c#,asp.net-core,reflection,razor-pages,C#,Asp.net Core,Reflection,Razor Pages,今天,我有以下几种模型/课程: public class Event { public DateTime Date { get; set; } public string Name { get; set; } public string Description { get; set; } } public class Reportage { public string Author { get; set; } public string Name { g

今天,我有以下几种模型/课程:

public class Event
{
    public DateTime Date { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public class Reportage
{
    public string Author { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}
这些都是几个Razor页面的一部分,这些页面的代码或多或少都是100%相同的,但只有几行代码,这些代码在每个页面上都是唯一的,例如,与此不同:

List<Event> itemList = Utility.GetCachedData<List<Event>>("event.json");
下一步是做一些类似的事情,例如使用
List itemList,为此我找到了
Convert.ChangeType(object,type)
,并执行了以下操作:

var pi = itemList[0].GetType().GetProperty("Date");
if (pi != null)
    pi.SetValue(itemList[0], DateTime.Now, null);
var itemList =  Convert.ChangeType(itemObj, typeof(List<Event>));
有没有办法在运行时解决这个问题(除了使用
反射
),并使用标准的点表示法来获取/设置值

有没有办法在运行时解决这个问题(反射除外),并使用标准的点表示法来获取/设置值

不能使用点符号设置类型
事件
的属性
日期
,除非首先将变量强制转换为
事件

var item =  (Event)Convert.ChangeType(itemObj, typeof(Event));
item.Date = ...;
显然,这假设
ChangeType
实际返回一个
事件

有关更多信息,请参阅以下博客文章


为什么不使用反射,只编写
itemList[0].Date=DateTime.Now
?您希望
itemList.Date
做什么?您试图将属性分配给没有属性的对象。您的
Convert
毕竟是在创建
列表
而不是
事件
。这个例子让我很困惑:/@MarkusDeibel对不起,打错了那一行…更新了问题。我可能遗漏了什么,但是你不能为
事件
类的
Date
属性设置一个默认值吗<代码>公共日期时间日期{get;set;}=DateTime.Now我不认为使用反射更易于维护。一般来说,这似乎是一个XY问题。询问你实际上试图解决的问题,而不是你认为能解决问题的解决方案。传递给这些视图的模型之间有什么不同,您无法概括Razor代码?我怀疑这一点…感谢您的确认,感谢您的链接,对我很有用。
var item =  (Event)Convert.ChangeType(itemObj, typeof(Event));
item.Date = ...;