LinqPadless
LinqPadless copied to clipboard
Support Main in a class, outside or under a namespace
It seems that #29 has more ramifications with respect to entry-point Main.
If Main is in a class in a namespace:
public static void Print(MethodBase method) =>
Console.WriteLine($"{method.DeclaringType.FullName}::{method.Name}");
namespace MyApp1
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
It gets called:
MyApp1.Program::Main
If there are two Main:
public static void Print(MethodBase method) =>
Console.WriteLine($"{method.DeclaringType.FullName}::{method.Name}");
namespace MyApp1
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
namespace MyApp2
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
then the latter of the two is called:
MyApp2.Program::Main
If there is also a Main at root, however:
public static void Print(MethodBase method) =>
Console.WriteLine($"{method.DeclaringType.FullName}::{method.Name}");
public static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
namespace MyApp1
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
namespace MyApp2
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
then it is called instead:
UserQuery::Main
If there is a Main in a class without a namespace:
public static void Print(MethodBase method) =>
Console.WriteLine($"{method.DeclaringType.FullName}::{method.Name}");
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
namespace MyApp1
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
namespace MyApp2
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
then it is called and trumps the other two:
UserQuery+Program::Main
Finally, a Main outside a class and a namespace:
public static void Print(MethodBase method) =>
Console.WriteLine($"{method.DeclaringType.FullName}::{method.Name}");
public static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
namespace MyApp1
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
namespace MyApp2
{
static class Program
{
static void Main(string[] args) =>
Print(MethodBase.GetCurrentMethod());
}
}
then it trumps all:
UserQuery+Program::Main
/cc @albahari