Ole*_*ers 4 c# reflection types nullable
我需要检查两种类型是否相同:
private bool AreOfTheSameType(object obj1, object obj2) {
return obj1.GetType()==obj2.GetType();
}
Run Code Online (Sandbox Code Playgroud)
这适用于以下值:
var test1=AreOfTheSameType(new DateTime(), new DateTime()) // true;
var test2=AreOfTheSameType(new int(), new DateTime()) // false;
Run Code Online (Sandbox Code Playgroud)
我现在想要的是以下内容也返回 true:
var test3=AreOfTheSameType(new int?(), new int())
Run Code Online (Sandbox Code Playgroud)
因此,如果类型具有相同的基数,但一个是可为空的,另一个则不是,我也想将其返回为 true。或者换一种方式说,我想要一个函数来返回是否可以使用反射直接将 obj1 存储到 obj2 中,而不必转换值。
更新
我减少了代码以使其更具可读性。看起来这一次是适得其反的。实际代码如下:
var entity = Activator.CreateInstance(typeof(T));
Type entityType = typeof(T);
PropertyInfo[] entityProperties = entityType.GetProperties();
foreach (KeyValuePair<string, object> fieldValue in item.FieldValues)
{
if (fieldValue.Value == null) continue;
var property = entityProperties.FirstOrDefault(prop => prop.Name == fieldValue.Key);
if (property != null && property.CanWrite)
{
Type valueType = fieldValue.Value.GetType();
if (fieldValue.Value.GetType() == property.PropertyType) {
// Assign
}
}
}
Run Code Online (Sandbox Code Playgroud)
“//Assign” - 行上的问题是,我有以下两种类型:
fieldValue.Value.GetType().ToString()="System.DateTime"
property.PropertyType.ToString()="System.Nullable`1[System.DateTime]"
Run Code Online (Sandbox Code Playgroud)
显然不相同但可以分配
显然不相同但可以分配
看起来你在追求这个Type.IsAssignableFrom方法:
var dt = typeof(DateTime);
var nd = typeof(DateTime?);
Console.WriteLine(dt.IsAssignableFrom(nd)); // false
Console.WriteLine(nd.IsAssignableFrom(dt)); //true
Run Code Online (Sandbox Code Playgroud)
现场示例:http : //rextester.com/KDOW15238
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |