c# - 如何在 C# 中将动态或对象转换为强类型对象
问题描述
我有一个类,其中有以下属性。
Public class Classifields
{
public int ID {get;set;}
public Name {get; set;}
public Type {get; set;}
}
上述对象用作父对象中的子对象。所以父对象将包含这个 Classifields 的 Id。
出于某种目的,我正在获取父类的所有属性以及加载到其中的相关对象,这意味着也加载了父对象和子对象。
我以这种方式获取属性,如下所示。
PropertyInfo[] allProps = typeof(T).GetProperties();
return allProps;
所以返回的属性有时会有单个 Classifields 或有时会有多个 classifields。
我取值如下
var newValue = prop.GetValue(model, null);
对于 Classifields 列表属性,我正在检查属性 fullname 是否包含“Classifields”,并将 classifields 列表或单个 Classfields 作为动态对象进行处理,并从列表或单个项目中获取带有逗号分隔值的名称。
当它是多个条目时,我尝试使用对象的 IList 来对动态进行类型转换,它可以正常工作,但是当它作为单个对象出现时,它会失败,因为它不是 IList。
同时我尝试了 foreach Classifields 但这也行不通。
if(val.FullName.Contains("Classifields"))
{
old = (oldV != null) ? GetNames(oldV) : null;
new = (newV != null) ? GetNames(newV) : null;
}
public string GetNames(dynamic stringDatatoProcess)
{
if (stringDatatoProcess== null)
return "";
try
{
string Names = "";
if (stringDatatoProcess!= null)
{
dynamic dynamicDog = stringDatatoProcess;
string values = string.Empty;
//IList<Classifields> classfields = dynamicDog;
StringBuilder stringvalues = new StringBuilder();
foreach(Classification classification in dynamicDog)
{
stringvalues.Append(classification.ClsName);
stringvalues.Append(",");
}
ClsNames = stringvalues.ToString().TrimEnd(',');
}
return ClsNames;
}
catch (Exception ex)
{
throw ex;
}
}
如何处理这种情况,因为我也无法检查计数,因为它是动态对象。而且我无法计算这些项目,因为它在进行类型转换时抛出了异常。
解决方案
推荐阅读
- angular - Angular中ngFor内的isEmpty条件
- php - Yii2 dataprovider 未加载 GET 参数
- php - 确保相同的数组项在 php 中不相邻
- python - 不知道如何预处理我的数据集以进行图像分类
- javascript - 在单击按钮时显示 html 页面的单独部分
- typescript - 如何解决“t.hrtime 不是函数”问题?
- java - 使用for循环打印出二维数组中不同行和列的值
- java - JAVA PriorityQueue 比较器不接受浮点数
- linux - 如何在 Linux 上从文件中删除函数?
- ios - 如何从 Bundle 中获取 PNG 文件的资源路径?