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(メソッドと演算子) が機能しません。しかし、型をクラスに変換すれば、やりたいことができると思います。

しかし、アイデアを学びたいのですが、この操作をどのように行うべきですか、または型オブジェクトをクラスに変換して変換操作を使用するにはどうすればよいですか?

4

1 に答える 1

5

任意の型に対してこの汎用実装を作成したいのですが、equals(メソッドと演算子) が機能しません。

3 つのオプション;

1:object.Equals(x,y)メソッドを使用します (これは仮想Equals(x)メソッドを使用しますが、null 参照の問題を回避します)

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));

generics オプションの良い点は、値型 ( など) の場合にボックス化する必要がないことですdouble

于 2012-06-22T06:19:57.707 に答える