我可以编写以下代码,它会编译;

IList<ChatRequestMessage> chatRequestMessages = new List<ChatRequestMessage>();
ChatCompletionsOptions chatCompletionsOptions1 = new()
{
    Messages =
    {
        chatRequestMessages.First(),
        chatRequestMessages.Last()
    },
};

显然我的chatRequestMessages是空的,但它编译.消息只有一个设置器,但我可以在建设过程中设置它,但我不能这样设置;

IList<ChatRequestMessage> chatRequestMessages = new List<ChatRequestMessage>();
ChatCompletionsOptions chatCompletionsOptions1 = new()
{
    Messages = chatRequestMessages,
};

上面的代码给了我一个编译器错误,告诉我不能在没有公共setter的情况下设置值.为什么其中一个是允许的,而另一个是不允许的?

ChatCompletionOptions可以在Azure.AI.OpenAI Nuget包中找到,我使用的是.Net 7

推荐答案

这是因为C#编译器支持在初始化成员时合成对Add()方法的调用,这意味着它有效地发出以下代码:

chatCompletionsOptions1.Messages.Add(chatRequestMessages.First());
chatCompletionsOptions1.Messages.Add(chatRequestMessages.Last());

您可以在此文档中找到有关此的更多信息:Collection initializers.

Csharp相关问答推荐

使用ElasticsearchClient设置忽略属性.默认MappingFor<>

自定义JsonEditor,用于将SON序列化为抽象类

无法使用ternal- .net修复可空警告

如何将字节数组转换为字符串并返回?

NumPy s fftn in C#with pythonnet'

`Task`只有在C#中等待时才会运行吗?

C#DateTime.ToString在ubuntu和centos中返回不同的结果

REST API端点中异步后台代码执行的类型

可为空的泛型属性

从Blob存储中提取tar.gz文件并将提取结果上载到另一个Blob存储

UWP中的任务和界面

NET8 MAUI并部署到真实设备上进行测试

我如何让我的秒表保持运行场景而不重置

System.Text.Json .NET 8多形态语法化

在不添加不必要的尾随零的情况下本地化浮点型?

如何正确处置所有动态控件?

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

如何保存具有多个重叠图片框的图片框?

如何对列表<;列表>;使用集合表达式?

如何使用moq和xUnit对删除操作进行单元测试?