ถ้าฉันมีคลาสที่เรียกว่าMyProgram
มีวิธีดึง " MyProgram " เป็นสตริงหรือไม่?
ถ้าฉันมีคลาสที่เรียกว่าMyProgram
มีวิธีดึง " MyProgram " เป็นสตริงหรือไม่?
คำตอบ:
ลองสิ่งนี้:
this.GetType().Name
nameof
โอเปอเรเตอร์ใหม่ได้
ฉันต้องการที่จะโยนสิ่งนี้ให้ดี ฉันคิดว่าวิธีที่@micahtanเป็นที่ต้องการ
typeof(MyProgram).Name
nameof(MyProgram)
หรือใหม่กว่าที่คุณสามารถทำได้
แม้ว่าคำตอบของ micahtan นั้นดี แต่มันจะไม่ทำงานในวิธีการคงที่ หากคุณต้องการดึงชื่อของประเภทปัจจุบันอันนี้ควรทำงานได้ทุกที่:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
สำหรับการอ้างอิงหากคุณมีประเภทที่สืบทอดจากที่อื่นคุณสามารถใช้
this.GetType().BaseType.Name
หากคุณต้องการสิ่งนี้ในคลาสที่ได้รับคุณสามารถใส่รหัสนั้นลงในคลาสพื้นฐานได้:
protected string GetThisClassName() { return this.GetType().Name; }
จากนั้นคุณสามารถเข้าถึงชื่อในคลาสที่ได้รับ ส่งคืนชื่อคลาสที่ได้รับ แน่นอนเมื่อใช้คำหลักใหม่ "nameof" ไม่จำเป็นต้องทำตัวหลากหลายเช่นนี้
นอกจากนี้คุณสามารถกำหนดสิ่งนี้:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
แล้วใช้ดังนี้:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
ใช้สิ่งนี้
สมมติว่า Application Test.exeทำงานและฟังก์ชั่นคือfoo ()ในform1 [โดยทั่วไปคือclass form1 ] จากนั้นโค้ดด้านบนจะสร้างการตอบสนองด้านล่าง
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
สิ่งนี้จะกลับมา
s1 = "TEST.form1"
สำหรับชื่อฟังก์ชั่น:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
จะกลับมา
s1 = foo
หมายเหตุหากคุณต้องการใช้สิ่งนี้ยกเว้นการใช้:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
เพื่อให้คุณได้รับการเตือนเมื่อตรวจสอบเป็นโมฆะ
this
สามารถละเว้นได้ สิ่งที่คุณต้องได้รับชื่อคลาสปัจจุบันคือ:
GetType().Name
รับชื่อคลาสปัจจุบันของ Asp.net
string CurrentClass = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString();
[Nullable(2)]
เพื่อให้คุณได้รับการเตือนเมื่อตรวจสอบเป็นโมฆะ