如何在C#中将Type转换为Class

ibr*_*maz 1 c#

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

在我的例子中,我有一个双数组对象,但它们存储在对象数组中.

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);
}
Run Code Online (Sandbox Code Playgroud)

我想为任何类型制作这个通用实现,但equals(方法和运算符)不起作用.但如果我将类型转换为类,我认为我可以做我想要的.

但是我想学习一些想法以及如何进行此操作或如何将类型对象转换为Class以使用它进行转换操作?

Mar*_*ell 5

我想为任何类型制作这个通用实现,但equals(方法和运算符)不起作用.

三种选择;

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

object firstItem = values[0];
return values.Skip(1).Any(item => Equals(item,firstItem));
Run Code Online (Sandbox Code Playgroud)

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

dynamic firstItem = values[0];
return values.Skip(1).Any(item => (dynamic)item == firstItem);
Run Code Online (Sandbox Code Playgroud)

3:使用泛型(这里values是一个打字的T[]):

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

泛型选项的好处是,当它值类型(例如double)时,您可以避免使用box .