441 Stimmen

Test, ob das Objekt die Schnittstelle implementiert

Wie kann man am einfachsten testen, ob ein Objekt eine bestimmte Schnittstelle in C# implementiert? (Antwort auf diese Frage in Java )

14voto

eliasetm Punkte 1101

Diese Beitrag ist eine gute Antwort.

public interface IMyInterface {}

public class MyType : IMyInterface {}

Dies ist ein einfaches Beispiel:

typeof(IMyInterface).IsAssignableFrom(typeof(MyType))

oder

typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))

4voto

Dutchman078 Punkte 91

Was bei mir funktioniert hat, ist:

Assert.IsNotNull(typeof (YourClass).GetInterfaces().SingleOrDefault(i => i == typeof (ISomeInterface)));

4voto

mavi Punkte 1002

Dies habe ich durch die Verwendung der is Stichwort.

Aber auch ich brauchte ein neues Objekt, um die Eigenschaften der Schnittstelle zu nutzen. Um dies zu erreichen, müssen Sie die neue Variable nach der Schnittstelle hinzufügen.

objectToCheck is Interface newVariableWithInterfaceProperties

.

 public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken,
            RequestHandlerDelegate<TResponse> next)
        {
            if (request is ICacheableQuery cachableRequest)
            {
             // here cachableRequest now has the interface properties.
             }
        }

3voto

Guosheng Chen Punkte 11
    interface IItem
    {

    }

    class ItemImp : IItem
    {

    }

    class Program
    {
        static void Main(string[] args)
        {
            Type t = typeof(ItemImp);

            Console.WriteLine("t == typeof(IItem) -> {0}", t == typeof(IItem));
            Console.WriteLine("typeof(IItem).IsAssignableFrom(t) -> {0}", typeof(IItem).IsAssignableFrom(t));
            Console.WriteLine("t is IItem -> {0}", t is IItem);
            Console.WriteLine("new ItemImp() is IItem -> {0}", new ItemImp() is IItem);
        }
    }

// Here are outputs:
// t == typeof(IItem) -> False
// typeof(IItem).IsAssignableFrom(t) -> True
// t is IItem -> False
// new ItemImp() is IItem -> True

2voto

jamesmillerio Punkte 3074

Zusätzlich zum Testen mit dem "is"-Operator können Sie Ihre Methoden ausschmücken, um sicherzustellen, dass die übergebenen Variablen eine bestimmte Schnittstelle implementieren, z. B. so:

public static void BubbleSort<T>(ref IList<T> unsorted_list) where T : IComparable
{
     //Some bubbly sorting
}

Ich bin nicht sicher, in welcher Version von .Net dies implementiert wurde, so dass es in Ihrer Version möglicherweise nicht funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X