【发布时间】:2009-06-26 01:13:24
【问题描述】:
大家好,我已经将我需要了解的一些复杂性内容放到了我需要了解的核心内容中。
我想将一组值发送到一个方法,并在该方法中测试该值,例如,一个实体的属性。该属性将始终与值的类型相同。
我也想测试一下值是null,还是默认值,显然要看值类型是引用类型,还是值类型。
现在,如果发送给该方法的所有值都属于同一类型,那么我可以使用泛型很容易地做到这一点,如下所示:
public static void testGenerics<TValueType>(List<TValueType> Values) {
//test null/default
foreach (TValueType v in Values) {
if (EqualityComparer<TValueType>.Default.Equals(v, default(TValueType))) {
//value is null or default for its type
} else {
//comapre against another value of the same Type
if (EqualityComparer<TValueType>.Default.Equals(v, SomeOtherValueOfTValueType)) {
//value equals
} else {
//value doesn't equal
}
}
}
}
我的问题是,如果我的 Collection 包含不同类型的值,我将如何执行相同的功能。
我主要关心的是成功识别空值或默认值,并成功识别传入的每个值是否等于同一类型的其他值。
我可以通过简单地传递类型对象来实现这一点吗?我也不能真正使用 EqualityComparers,因为我不能使用泛型,因为我正在传递 一个未知数不同类型的。
有解决办法吗?
谢谢
更新
好的,四处搜索,我可以使用以下代码在我的场景中成功测试 null/default(取自 this SO answer):
object defaultValue = type.IsValueType ? Activator.CreateInstance(type) : null;
我认为这可能有效。
现在,我如何在不知道它们的类型的情况下成功地比较两个相同类型的值?
【问题讨论】: