public TypeSymbolInfo(TypeSymbol typeSymbol) { _typeSymbol = typeSymbol; Name = typeSymbol.Name; FullName = typeSymbol.ToString(); ContainingNamespace = typeSymbol.ContainingNamespace == null ? null : typeSymbol.ContainingNamespace.ToString(); AllInterfaces = GetAllInterfaces(typeSymbol); TypeArguments = GetTypeArguments(typeSymbol); }
public bool IsAssignableFrom(TypeSymbolInfo typeSymbolInfo) { var typeSymbolString = _typeSymbol.ToString(); for (var typeSymbolLoop = typeSymbolInfo._typeSymbol; typeSymbolLoop != null; typeSymbolLoop = typeSymbolLoop.BaseType) { if (typeSymbolLoop.ToString() == typeSymbolString) { return(true); } var typeSymbolLoopString = typeSymbolLoop.ToString(); if (typeSymbolLoop.GetMembers().OfType <IMethodSymbol>().Where(m => m.Name == "op_Implicit" || m.Name == "op_Explicit").Any(op => op.ReturnType.ToString() == typeSymbolString) || _typeSymbol.GetMembers().OfType <IMethodSymbol>().Where(m => m.Name == "op_Implicit" || m.Name == "op_Explicit").Any(op => op.ReturnType.ToString() == typeSymbolLoopString)) { return(true); } } if (typeSymbolInfo._typeSymbol.AllInterfaces.Any(i => i.ToString() == typeSymbolString)) { return(true); } return(false); }