ถ้าฉันมีลายเซ็นวิธีเช่น
public string myMethod<T>( ... )
ฉันจะรับชื่อประเภทที่กำหนดเป็นอาร์กิวเมนต์ประเภทภายในเมธอดได้อย่างไร อยากทำอะไรคล้าย ๆ กันtypeof(T).FullNameแต่ได้ผลจริง ...
ถ้าฉันมีลายเซ็นวิธีเช่น
public string myMethod<T>( ... )
ฉันจะรับชื่อประเภทที่กำหนดเป็นอาร์กิวเมนต์ประเภทภายในเมธอดได้อย่างไร อยากทำอะไรคล้าย ๆ กันtypeof(T).FullNameแต่ได้ผลจริง ...
คำตอบ:
รหัสของคุณควรใช้งานได้ typeof(T).FullNameถูกต้องสมบูรณ์ นี่คือโปรแกรมที่รวบรวมและทำงานได้อย่างสมบูรณ์:
using System;
class Program
{
public static string MyMethod<T>()
{
return typeof(T).FullName;
}
static void Main(string[] args)
{
Console.WriteLine(MyMethod<int>());
Console.ReadKey();
}
}
การรันภาพพิมพ์ด้านบน (ตามที่คาดไว้):
System.Int32
<int?>" ถ้าเป็นเช่นนั้นก็ใช้ได้ แต่คุณได้รับSystem.Nullable<int>(ในรูปแบบของชื่อเต็ม) ซึ่งเป็นสิ่งที่คุณคาดหวัง ...
nameof(T)และtypeof(T).Nameจะทำในสิ่งเดียวกัน ปรากฎว่าnameof(T)เพิ่งกลับTมา
typeof(T).Nameและtypeof(T).FullNameกำลังทำงานให้ฉัน ฉันได้รับประเภทที่ส่งผ่านเป็นอาร์กิวเมนต์
สมมติว่าคุณมี T อยู่บ้างก็ไม่ต่างจากประเภทอื่น ๆ
var t = new T();
var name = t.GetType().FullName;
typeof(T).FullNameควรทำงาน เกิดอะไรขึ้นแทน?