List<T>
实现IReadOnlyCollection<T>
接口并提供AsReadOnly()
返回的方法ReadOnlyCollection<T>
(进而实现IReadOnlyCollection<T>
).
用途/原因是AsReadyOnly()
什么?它的存在气味有一两个边缘情况,只是将列表返回为IReadOnlyCollection<T>
它不够好.
起初,我虽然它可能是防止铸造成本岬遥远,但它看起来像你可以做到这一点ReadOnlyCollection<T>
的Items
存取器.
BTW.ReadOnlyCollection<T>
类型读取的文档
提供通用只读集合的基类.
在我的脑海中,与描述为的构造函数冲突
初始化(...)类的新实例,它是指定列表周围的只读包装器.
更新:
我没有看到ReadOnlyCollection<T>
的Items
是受保护的.
在 .NET<5 和 .NET Core 3.1 中,以下代码
var d = new Dictionary<string, int> { { "a", 0 }, { "b", 0 }, { "c", 0 } };
foreach (var k in d.Keys)
{
d[k]+=1;
}
Run Code Online (Sandbox Code Playgroud)
投掷
System.InvalidOperationException:集合已修改;枚举操作可能无法执行。
当面向 .NET 5 时,代码段不再抛出。
发生了什么变化?
我未能在Breaking changes in .NET 5和Performance Improvements in .NET 5 中找到答案。
是不是和什么有关ref readonly T
?
在MySql中,您可以看到表定义(带有数据类型的列等)show create table table_name
.
oracle sql有类似的功能吗?
让我们假设这个小程序运行:
while (true)
{
Console.WriteLine($"{DateTime.UtcNow} -> {DateTime.Now} tz={TimeZone.CurrentTimeZone.StandardName} / {TimeZoneInfo.Local.StandardName}");
await Task.Delay(TimeSpan.FromSeconds(1));
}
Run Code Online (Sandbox Code Playgroud)
当我在程序运行时更改系统的时区时,应用程序看不到更改.时区和时间就好像时区没有改变.
为了让应用程序显示新的时间和时区,我需要重新启动应用程序.
如果我更改系统时间,则会立即获取时间更改.
如果你能帮我解决三个问题,那将是很棒的:
这是一个使用与操作系统不同的时间显示.NET应用程序的屏幕截图:
BTW.在Raspberry Pi上的Windows IOT上,我的实验表明,如果我重新启动应用程序,它将显示新的时区,但是"旧"时间.重新启动系统后将获取新时间.
我使用开箱即用的分区创建了一个有状态的服务:
<StatefulService ServiceTypeName="ExamplesServiceType" TargetReplicaSetSize="[ExamplesService_TargetReplicaSetSize]" MinReplicaSetSize="[ExamplesService_MinReplicaSetSize]">
<UniformInt64Partition PartitionCount="[ExamplesService_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
</StatefulService>
Run Code Online (Sandbox Code Playgroud)
服务清单将params设置为(开箱即用):
<Parameter Name="ExampleService_PartitionCount" Value="1" />
<Parameter Name="ExampleService_MinReplicaSetSize" Value="2" />
<Parameter Name="ExampleService_TargetReplicaSetSize" Value="3" />
<Parameter Name="WebService_InstanceCount" Value="1" />
Run Code Online (Sandbox Code Playgroud)
现在我想从同一群集中的无状态服务调用我的有状态服务:
ServiceUriBuilder builder = new ServiceUriBuilder(ExampleServiceName);
var service = ServiceProxy.Create<IExampleService>(builder.ToUri(),new ServicePartitionKey(1));
return service.MyCallAsync(id);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
为分区"a67f7afa-3370-4e6f-ae7c-15188004bfa1"的初级或无国籍实例具有无效地址,则这意味着从副本/实例正确的地址在系统中没有被注册
有状态的服务,我试图达到记录到事件日志和日志携带"的partitionid":"a67f7afa-3370-4e6f-ae7c-15188004bfa1".
我错过了什么?
假设我在5 D1类(1核,3.5GB RAM,50GB SSD)VM上运行Service Fabric集群.我正在这个集群上运行2个可靠的服务,一个是无状态的,一个是有状态的.我们假设副本目标是3.
如何计算我的可靠收藏能保持多少?
假设我添加了一个或多个有状态服务.由于我真的不知道框架如何分配服务,我需要采取最保守的方法,并假设一个节点可以在一个节点上运行我的所有有状态服务,并且它们的累积内存需要低于可用的RAM.单机?
我知道抽象类是一种无法实例化的特殊类.抽象类只是被分类(继承自).换句话说,它只允许其他类继承它但不能实例化.优点是它为所有子类强制执行某些层次结构.简单来说,它是一种强制所有子类进行相同层次结构或标准的契约.
我也知道An接口不是一个类.它是由Interface这个词定义的实体.接口没有实现; 它只有签名或换言之,只是没有正文的方法的定义.作为与Abstract类相似的一个,它是一个契约,用于为所有子类定义层次结构,或者它定义特定的方法集及其参数.它们之间的主要区别在于类可以实现多个接口,但只能从一个抽象类继承.由于C#不支持多重继承,因此接口用于实现多重继承.
当我们创建一个接口时,我们基本上创建了一组方法,没有必须被实现的类覆盖的任何实现.它的优点是它为类提供了一种方法,使其成为两个类的一部分:一个来自继承层次结构,另一个来自接口.
当我们创建一个抽象类时,我们正在创建一个可能有一个或多个已完成方法的基类,但至少有一个或多个方法未完成并被声明为abstract.如果抽象类的所有方法都未完成,那么它与接口相同.
但 但 但
我注意到我们将在C#8.0中使用默认接口方法
也许我问它因为我只有1 - 2年的编程经验,但现在抽象类和界面之间的主要区别是什么?
我知道我们不能在界面中建立状态,它们之间只有一个区别吗?
为了避免重建未被触及的库,我正在将复制到输出目录的某些文件从复制始终更改为复制,如果在某些c#项目中更新.
更改其设置的文件将其" 构建操作"设置为" 内容"," 嵌入资源 "或" 资源"之一.
这伴随着什么风险?
背景
在Serilog被选为记录器的新项目中,我自动开始绕过ILogger
界面.代码访问Log.Logger
一次,从那时起,希望日志记录的类ILogger
通过构造函数注入接受.
我受到了这种做法的挑战,建议是在Log
课堂上使用静态方法,例如Serilog.Log.Debug(...)
.这个论点是,有一set;
对Log.Logger
如此嘲讽是很容易.
看看api,我可以看到传递的好处之一ILogger
就是ForContext
方法.
我花了一些时间在网上和Serilog的文档中,但是我找不到有关在整个应用程序代码中访问日志的规范方法的信息.
题
是否存在规范的,即大多数情况下更好的方式来访问/传递Serilog记录器,如果存在,是否ILogger
在Serilog.Log
类上传递或使用静态API ?
在没有任何 Azure 存储代码的 Azure 函数中,我在 Application Insights 中收到以下警告。
Error response [15fd74...ec3601] 409 The specified container already exists. (00.0s)
Server:Windows-Azure-Blob/1.0,Microsoft-HTTPAPI/2.0
x-ms-request-id:b72b1...f5-26564f000000
x-ms-client-request-id:15fd74...0ec3601
x-ms-version:2020-08-04
x-ms-error-code:ContainerAlreadyExists
Date:Mon, 21 Feb 2022 07:33:56 GMT
Content-Length:230
Content-Type:application/xml
Run Code Online (Sandbox Code Playgroud)
我认为可以合理地假设这与 Azure Functions 用于记录其状态等的存储帐户有关。
SDK版本azurefunctions:4.1.3.17473
有没有办法调试和/或解决问题?