gpt4 book ai didi

c# - 比较类型是否可为空

转载 作者:行者123 更新时间:2023-11-30 19:54:03 24 4
gpt4 key购买 nike

我需要检查两种类型是否相同:

private bool AreOfTheSameType(object obj1, object obj2) {
return obj1.GetType()==obj2.GetType();
}

这适用于以下值:

var test1=AreOfTheSameType(new DateTime(), new DateTime()) // true;
var test2=AreOfTheSameType(new int(), new DateTime()) // false;

我现在想要的是以下内容也返回 true:

var test3=AreOfTheSameType(new int?(), new int()) 

因此,如果类型具有相同的基础,但一个可以为 null,另一个不能,我也想将其返回为 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
}
}
}

“//Assign”行的问题是,我有以下两种类型:

fieldValue.Value.GetType().ToString()="System.DateTime"
property.PropertyType.ToString()="System.Nullable`1[System.DateTime]"

明显不同但可以分配

最佳答案

which are obiously not the same but could be assigned

看起来你在寻找 Type.IsAssignableFrom方法:

var dt = typeof(DateTime);            
var nd = typeof(DateTime?);

Console.WriteLine(dt.IsAssignableFrom(nd)); // false
Console.WriteLine(nd.IsAssignableFrom(dt)); //true

实例:http://rextester.com/KDOW15238

关于c# - 比较类型是否可为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44302697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com