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

如何在Azure SDK for C#中正确处理只读IList?

Azure SDK for C# 构建VirtualNetworkData时处理只读DhcpOptionsDnsServers的正确方式

针对VirtualNetworkData中DhcpOptions.DnsServers只读IList属性的问题,SDK维护者推荐的核心思路是利用集合的可变性填充元素——该只读属性内部实际绑定了一个可变的集合实例(如List<string>),因此无需赋值,直接通过Add方法或集合初始化语法填充即可。

具体实现方式

1. 直接用集合初始化语法构建(适合硬编码或已知元素)

如果DNS服务器地址是明确的,可在初始化DhcpOptions时直接用集合初始化语法填充:

var vnetData = new VirtualNetworkData
{
    Location = "eastus",
    AddressSpace = new AddressSpace
    {
        AddressPrefixes = { "10.0.0.0/16" }
    },
    DhcpOptions = new DhcpOptions
    {
        // 集合初始化语法会隐式调用DnsServers.Add()
        DnsServers = { "8.8.8.8", "1.1.1.1", "10.0.0.1" }
    }
};

2. 从外部数据源批量填充(适合动态获取的DNS列表)

如果DNS服务器地址来自外部数据源(如配置文件、数据库),可先创建DhcpOptions实例,再遍历数据源逐个添加元素:

// 模拟外部数据源获取DNS列表
IEnumerable<string> externalDnsServers = FetchDnsServersFromExternalSource();

var dhcpOptions = new DhcpOptions();
foreach (var dnsServer in externalDnsServers)
{
    dhcpOptions.DnsServers.Add(dnsServer);
}

var vnetData = new VirtualNetworkData
{
    Location = "eastus",
    AddressSpace = new AddressSpace { AddressPrefixes = { "10.0.0.0/16" } },
    DhcpOptions = dhcpOptions
};

为什么这些方式有效?

Azure SDK的资源数据模型(如VirtualNetworkData、DhcpOptions)采用不可变类型设计,但只读集合属性内部会默认初始化一个可变的集合实例(如List<string>)。因此你无法直接给DnsServers赋值,但可以调用其Add方法修改集合内容——这是SDK设计时特意保留的扩展能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:01:40