gpt4 book ai didi

c# - 无法检索显式接口(interface)实现的成员

转载 作者:行者123 更新时间:2023-11-30 13:56:51 25 4
gpt4 key购买 nike

我正在使用 Roslyn 分析 C# 代码,但在使用显式实现的接口(interface)时遇到了问题。给定一个实现接口(interface)的类型,我无法按名称检索显式实现的成员。例如:

var tree = CSharpSyntaxTree.ParseText(@"
using System;

namespace ConsoleApplication1
{
class MyClass : IDisposable
{
void IDisposable.Dispose()
{
}
public void Dispose()
{
}
}
}");

var Mscorlib = new MetadataFileReference(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create("MyCompilation",
syntaxTrees: new[] { tree }, references: new[] { Mscorlib });
var model = compilation.GetSemanticModel(tree);

var myType = compilation.GetTypeByMetadataName("ConsoleApplication1.MyClass");
var dispose = myType.GetMembers("Dispose").SingleOrDefault();
//explicitDispose is null.
var explicitDispose = myType.GetMembers("IDisposable.Dispose").SingleOrDefault();

只有当类型存在于命名空间中时才会出现这种情况,以下代码可以正常工作。

var tree = CSharpSyntaxTree.ParseText(@"
class MyClass : IDisposable
{
void IDisposable.Dispose()
{
}
public void Dispose()
{
}
}");
var Mscorlib = new MetadataFileReference(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create("MyCompilation",
syntaxTrees: new[] { tree }, references: new[] { Mscorlib });
var model = compilation.GetSemanticModel(tree);

var myType = compilation.GetTypeByMetadataName("MyClass");
var dispose = myType.GetMembers("Dispose").SingleOrDefault();
//explicitDispose is not null.
var explicitDispose = myType.GetMembers("IDisposable.Dispose").SingleOrDefault();

有人知道为什么会这样吗?有没有更好的方法来处理显式实现的接口(interface)?

最佳答案

在显式实现后,您似乎需要提供完全限定的方法签名:

var explicitDispose = myType.GetMembers("System.IDisposable.Dispose").SingleOrDefault();

(我本来打算删除这个问题,但我看到有人把它标记为收藏,所以我会提供对我有用的答案)

关于c# - 无法检索显式接口(interface)实现的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com