2008-10-07 81 views
11

是否有一個列表上的公用屬性,在Serializable等對象中使用?.NET屬性列表

感謝

編輯〜我問的原因是我在ntiers運籌學和管理學跨越StoredProcedure的屬性來了。

回答

11

是的,看看msdn你有沒有覆蓋請看here

編輯:此鏈接只回答吸。這是所有可加載類型(gac​​)的名稱中都有Attribute的工作提取器。

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Reflection; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var process = new Process(); 
      //your path may vary 
      process.StartInfo.FileName = @"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe"; 
      process.StartInfo.RedirectStandardOutput = true; 
      process.StartInfo.UseShellExecute = false; 
      process.StartInfo.Arguments = "/l"; 
      process.Start(); 

      var consoleOutput = process.StandardOutput; 


      var assemblyList = new List<string>(); 
      var startAdding = false; 
      while (consoleOutput.EndOfStream == false) 
      { 
       var line = consoleOutput.ReadLine(); 
       if (line.IndexOf("The Global Assembly Cache contains the following assemblies", StringComparison.OrdinalIgnoreCase) >= 0) 
       { 
        startAdding = true; 
        continue; 
       } 

       if (startAdding == false) 
       { 
        continue; 
       } 

       //add any other filter conditions (framework version, etc) 
       if (line.IndexOf("System.", StringComparison.OrdinalIgnoreCase) < 0) 
       { 
        continue; 
       } 

       assemblyList.Add(line.Trim()); 
      } 

      var collectedRecords = new List<string>(); 
      var failedToLoad = new List<string>(); 

      Console.WriteLine($"Found {assemblyList.Count} assemblies"); 
      var currentItem = 1; 


      foreach (var gacAssemblyInfo in assemblyList) 
      { 
       Console.SetCursorPosition(0, 2); 
       Console.WriteLine($"On {currentItem} of {assemblyList.Count} "); 
       Console.SetCursorPosition(0, 3); 
       Console.WriteLine($"Loading {gacAssemblyInfo}"); 
       currentItem++; 

       try 
       { 
        var asm = Assembly.Load(gacAssemblyInfo); 

        foreach (Type t in asm.GetTypes()) 
        { 
         if (t.Name.EndsWith("Attribute", StringComparison.OrdinalIgnoreCase)) 
         { 
          collectedRecords.Add($"{t.FullName} - {t.Assembly.FullName}"); 
         } 
        } 

       } 
       catch (Exception ex) 
       { 
        failedToLoad.Add($"FAILED to load {gacAssemblyInfo} - {ex}"); 
        Console.SetCursorPosition(1, 9); 
        Console.WriteLine($"Failure to load count: {failedToLoad.Count}"); 
        Console.SetCursorPosition(4, 10); 
        Console.WriteLine($"Last Fail: {gacAssemblyInfo}"); 
       } 
      } 

      var fileBase = System.IO.Path.GetRandomFileName(); 
      var goodFile = $"{fileBase}_good.txt"; 
      var failFile = $"{fileBase}_failedToLoad.txt"; 
      System.IO.File.WriteAllLines(goodFile, collectedRecords); 
      System.IO.File.WriteAllLines(failFile, failedToLoad); 
      Console.SetCursorPosition(0, 15); 
      Console.WriteLine($"Matching types: {goodFile}"); 
      Console.WriteLine($"Failures: {failFile}"); 
      Console.WriteLine("Press ENTER to exit"); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

我所看到的只是「用在像對象中的屬性?」 - 該帖子被剝奪了其可序列化屬性。我雖然他問的是可空數(?和??) – StingyJack 2008-10-07 17:28:10

+0

刪除了評論和更新的答案,一旦誤解被清除,準確的信息 – 2008-10-07 17:28:32

2

我不知道屬性的完整列表,但在MSDN中搜索屬性可以產生有趣的結果。我傾向於瀏覽有趣的屬性類型的名稱空間,然後去查看它們,看看我可以使用它們。我知道不是最有效的方法。

System.Attribute的MSDN條目在底部有一個列表。

3

此外,還可以創建自己的屬性。如果您正在通過其他人的代碼進行搜索,那麼創建自己的代碼時很容易感到困惑。

1

您可以使用反射來瀏覽mscorlib組裝,並在System.Attribute,擴大派生類型節點。它將顯示當前在Reflector中加載的所有程序集的所有屬性。