Implement a graph data structure

Using C#, Implement a graph data structure that meets the following requirements.
• The main class is to be called Graph and supports generic type parameters to define the
data type of the object stored in each vertex.
• The generic type parameter T represents the value to be stored in the Graph
• A vertex in the Graph is represented by a class called GraphNode
• The vertex is capable of storing a single object of type T
• A vertex must support a Name property (string)
• The Graph class contains a structure that implements either an adjacency matrix or an
adjacency list for the GraphNode(s)
• The Graph must support the construction of a weighted graph
• The Graph must support Depth-First Search (DFS) for an unweighted, undirected graph OR
the Breadth-First Search (BFS) for an unweighted, undirected graph