A debate that can hold different point of views in different scenarios. It is impossible to say because it depends on the point of view of the speaker, it depends on what they are comparing it to, and it depends on their attitude towards various language features.

C# is a pragmatic language there is a way to override all three of those safety systems. Cast operators and “dynamic” in C# 4 override compile-time type checking and replace it with runtime type checking, and “unsafe” blocks allow you to turn off type safety and memory safety should you need to. Someone who thinks that “strongly typed” means “the language absolutely positively guarantees static typing, type safety and memory safety under all circumstances” would quite rightly classify C# as “weakly typed”. C# is not as strongly typed as languages that do enforce these restrictions all the time.

Lets keep it simple by saying that C# is a strongly typed language as well as holds features of weakly typed language as well, and it depends on how we want to mold it according to scenarios. And I guess this adaptability makes C# a strong language competitor if there is to make a choice.