HuB*_*eZa 6 .net c# com-interop marshalling
Type classType = typeof(SomeClass);
bool equal = Marshal.GenerateGuidForType(classType) == classType.GUID;
Run Code Online (Sandbox Code Playgroud)
我没有找到一个失败的情况.
那么为什么以及何时应该使用该Marshal方法而不是简单地获取GUID属性?
... GenerateGuidForType提供与Type.GUID属性相同的功能.
所以根据文档他们是一样的.但是,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.
}
}
}