私は一般的な比較機能を実行しようとしていますが、何がうまくいかないのか分かりません。一般的なIComparerをテストする
比較演算のコード:
namespace Pract_02
{
public class ComparerProperty<T> : IComparer<T>
{
private String attribute;
public ComparerProperty(String text)
{
attribute = text;
}
public int Compare(T x, T y)
{
PropertyDescriptor property = GetProperty(attribute);
IComparable propX = (IComparable)property.GetValue(x);
IComparable propY = (IComparable)property.GetValue(y);
return propX.CompareTo(propY);
}
private PropertyDescriptor GetProperty(string name)
{
T item = (T)Activator.CreateInstance(typeof(T));
PropertyDescriptor propName = null;
foreach (PropertyDescriptor propDesc in TypeDescriptor.GetProperties(item))
{
if (propDesc.Name.Contains(name)) propName = propDesc;
}
return propName;
}
}
}
そして、これは私のテストコードです:
私はそれをテストする際の問題は、私は「System.MissingMethodExceptionを受けている
public void TestComparer() { SortedSet<Vehicle> list = new SortedSet<Vehicle>(new ComparerProperty<Vehiculo>("NumWheels")); Car ca = new Car(); Moto mo = new Moto(); Tricycle tri = new Tricycle(); list.Add(tri); list.Add(ca); list.Add(mo); IEnumerator<Vehiculo> en = list.GetEnumerator(); en.MoveNext(); Assert.AreEqual(en.Current, mo); en.MoveNext(); Assert.AreEqual(en.Current, tri); en.MoveNext(); Assert.AreEqual(en.Current, ca); }
:することはできません抽象クラスを作成してください。 "ここで
私の車と車のクラスのコードです:あなたは抽象クラスの車両からインスタンスを作成しようとしていた間、
public abstract class Vehicle
{
public abstract int NumWheels
{
get;
}
}
public class Car : Vehicle
{
public override int NumWheels
{
get
{
return 4;
}
}
}
を得るIComparableをされていない場合。 'Vehicle'は抽象ですので、例外が発生します。探しているプロパティを取得するために新しいインスタンスを構築する必要はありません。 – Lee