1

我需要学习如何在 C# 中将类型转换为类。

就我而言,我有一个双数组对象,但它们存储在对象数组中。

public object Convert(object[] values, Type targetType, object parameter,
                      CultureInfo culture)
{
    if (values == null || values.Any(v => v == DependencyProperty.UnsetValue))
        return false;
    var typeOfArray = values[0].GetType();
    var firstItem = (double)values[0];
    return values.Skip(1).Any(item => (double)item == firstItem);
}

我想为任何类型制作这个通用实现,但 equals(method and operator) 不起作用。但是,如果我将类型转换为类,我想我可以做我想做的事。

但是我想学习一些想法,我应该如何做这个操作或者我如何将类型对象转换为类来使用它的转换操作?

4

1 回答 1

5

我想为任何类型制作这个通用实现,但 equals(method and operator) 不起作用。

三个选项;

1:使用object.Equals(x,y)方法(这里使用虚Equals(x)方法,但避免了null-ref问题)

object firstItem = values[0];
return values.Skip(1).Any(item => Equals(item,firstItem));

2:使用dynamic,但意识到这可能会影响性能:

dynamic firstItem = values[0];
return values.Skip(1).Any(item => (dynamic)item == firstItem);

3:使用泛型(这里values是类型化的,T[]):

var comparer = EqualityComparer<T>.Default;
T firstItem = values[0];
return values.Skip(1).Any(item => comparer.Equals(item,firstItem));

泛型选项的好处是,当它值类型(例如double)时,您可以避免装箱。

于 2012-06-22T06:19:57.707 回答