You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

枚举类型使用扩展方法遇编译错误:扩展方法无法访问

C#编译器无法识别同一命名空间下的枚举扩展方法?

测试代码如下:

namespace ABC.ACSUnitySDKTest
{
    [TestFixture]
    public class AudioStreamSampleRateExTests
    {
        [Test]
        public void ToHz_16000Hz_ReturnsCorrectValue()
        {
            var result = AudioStreamSampleRate.Hz_16000.ToHz(); // <-- ERROR! .ToHz() is not defined!
            Assert.That(result, Is.EqualTo(16000));
        }
    }
}

完整错误信息:

CS1061 'AudioStreamSampleRate' does not contain a definition for
'ToHz' and no accessible extension method 'ToHz' accepting a first
argument of type 'AudioStreamSampleRate' could be found (are you
missing a using directive or an assembly reference?)

扩展方法定义代码:

namespace ABC
{
    internal static class AudioStreamSampleRateEx
    {
        public static int ToHz(this AudioStreamSampleRate sampleRate)
        {
            return sampleRate switch
            {
                AudioStreamSampleRate.Hz_16000 => 16000,
                AudioStreamSampleRate.Hz_22050 => 22050,
                AudioStreamSampleRate.Hz_24000 => 24000,
                AudioStreamSampleRate.Hz_32000 => 32000,
                AudioStreamSampleRate.Hz_44100 => 44100,
                AudioStreamSampleRate.Hz_48000 => 48000,
                _ => throw new NotImplementedException()
            };
        }
    }
}

问题原因

核心问题出在扩展方法所在静态类的访问修饰符:AudioStreamSampleRateEx被标记为internal,该修饰符限定类只能在同一程序集内被访问。

你的测试代码位于ABC.ACSUnitySDKTest命名空间,属于独立的测试程序集(即便命名空间是ABC的子空间),跨程序集时internal类无法被访问,因此编译器找不到ToHz扩展方法。

解决办法

  • 修改访问修饰符:将AudioStreamSampleRateEx的internal改为public,让测试程序集能直接访问该静态类及其中的扩展方法。
  • 保持internal并授权访问:若不想修改原类的访问级别,可在原项目的AssemblyInfo.cs中添加如下代码,允许测试程序集访问原程序集的internal成员:
    [assembly: InternalsVisibleTo("ABC.ACSUnitySDKTest")]
    

内容的提问来源于stack exchange,提问作者Kamran Bigdely

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:32:07