ถ้าฉันมีลายเซ็นวิธีเช่น
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
ควรทำงาน เกิดอะไรขึ้นแทน?