Marshal.GenerateGuidForType(Type)和Type.GUID之间有什么区别?
Type classType = typeof(SomeClass); bool equal = Marshal.GenerateGuidForType(classType) == classType.GUID;
我没有找到一个失败的情况。
那么为什么以及何时应该使用Marshal
方法而不是简单地获取GUID
属性?
请参阅http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.generateguidfortype.aspx
… GenerateGuidForType提供与Type.GUID属性相同的function。
所以根据文档他们是一样的。 但是,Marshal.GenerateGuidForType仅适用于RuntimeType对象,而Type.GUID也适用于其他一些Type实现。
例如:
using System; using System.CodeDom; using System.Runtime.InteropServices; using System.Workflow.ComponentModel.Compiler; namespace Samples { class Program { static CodeCompileUnit BuildHelloWorldGraph() { var compileUnit = new CodeCompileUnit(); var samples = new CodeNamespace("Samples"); compileUnit.Namespaces.Add(samples); var class1 = new CodeTypeDeclaration("Class1"); samples.Types.Add(class1); return compileUnit; } static void Main(string[] args) { var unit = BuildHelloWorldGraph(); var typeProvider = new TypeProvider(null); typeProvider.AddCodeCompileUnit(unit); var t = typeProvider.GetType("Samples.Class1"); Console.WriteLine(t.GUID); // prints GUID for design time type instance. Console.WriteLine(Marshal.GenerateGuidForType(t)); // throws ArgumentException. } } }
using System; using System.CodeDom; using System.Runtime.InteropServices; using System.Workflow.ComponentModel.Compiler; namespace Samples { class Program { static CodeCompileUnit BuildHelloWorldGraph() { var compileUnit = new CodeCompileUnit(); var samples = new CodeNamespace("Samples"); compileUnit.Namespaces.Add(samples); var class1 = new CodeTypeDeclaration("Class1"); samples.Types.Add(class1); return compileUnit; } static void Main(string[] args) { var unit = BuildHelloWorldGraph(); var typeProvider = new TypeProvider(null); typeProvider.AddCodeCompileUnit(unit); var t = typeProvider.GetType("Samples.Class1"); Console.WriteLine(t.GUID); // prints GUID for design time type instance. Console.WriteLine(Marshal.GenerateGuidForType(t)); // throws ArgumentException. } } }
根据MSDN , “GenerateGuidForType提供与Type.GUID属性相同的function” 。 使用最适合你的那种应该是安全的。