小编tsi*_*lar的帖子

对于.NET IEnumerable,是否有相当于Python的enumerate()

我找不到相关的问题.

python你可以很容易地通过一个序列(循环list,generator等等),并收集迭代的索引,同时由于在以enumerate(seq)这样的:

>>> for (i,item) in enumerate(["toto","titi","tutu"]):
...     print i, item
...
0 toto
1 titi
2 tutu
Run Code Online (Sandbox Code Playgroud)

IEnumerable是否有类似的东西,例如,会变换IEnumerable<T>a IEnumerable<Tuple<Int32,T>>

(我知道它很容易完成,这要归功于Select()......中的正确功能,但如果它存在,我宁愿使用它:))

更新 FYI,我很好奇能够做出类似的事情:"给我满足这个条件的最后一项的索引",然后通过以下方式完成:

myEnumeration.First(t => some condition on t.Item2 ... ).Item1;
Run Code Online (Sandbox Code Playgroud)

.net ienumerable

5
推荐指数
3
解决办法
2042
查看次数

如何组织项目中的接口/类/实现

我发现了一些关于如何组织项目的问题(命名空间,每个文件一个类等),但更具体的说明,你如何组织非常紧密相关的"事物"?

我通常最终得到:

  • 一个界面 IMyStuff
  • 一个基类(有时是抽象的)类,为该接口提供基本的骨架:BaseMyStuff
  • 实施班 MyStuffWithBellsAndWhistles, MyStuffWithChocolateFlavours

似乎有意义的是它们应该在同一个命名空间中,但是如果我将所有这些文件放在同一个文件夹中(感觉不是真正的问题,但感觉很奇怪),感觉我的文件夹开始有点过于拥挤).

可以在同一个文件中定义接口和基类吗?

或者可以将这些东西分组到子文件夹中,但是在同一名称空间中?像这样 :

-MyNamespace
 |-Interfaces
   | -IMyStuff
   | -IMyOtherStuff
 |-BaseClasses
   | -BaseMyStuff
   | -BaseMyOtherStuff
 |-Implementation
   | -MyStuffWithAwesomeBehaviour
   | -MyStuffWithGreatUsefulness
   | -MyOtherStuffSoNeatYouWillCry
Run Code Online (Sandbox Code Playgroud)

关于这种组织的"最佳实践"是什么?

.net file-organization projects-and-solutions

5
推荐指数
1
解决办法
1024
查看次数

具有为用户和包含AD组创建的登录的Windows用户的数据库级权限?

当存在歧义时,SQL Server如何处理登录,例如,Windows用户帐户和包含此用户的AD组都存在登录?

我们在SQL Server 2008中使用Active Directory中的Windows用户和该AD中的组的权限存在一些问题.我将尝试用一个例子来解释.

想象一下DOMAIN\myUser属于AD组的Windows域用户DOMAIN\SomeGroup.

在SQL Server中,我有2个数据库SomeAppDbPublicDb.

目标是作为成员的所有用户都DOMAIN\SomeGroup应该能够访问PublicDb,但只能DOMAIN\myUser访问SomeAppDb.

最初,在SQL Server中,在DOMAIN\SomeGroup实例上创建了一个Windows登录(映射到AD组),并且在PublicDb具有适当角色成员资格的数据库中创建了一个用户,并且该用户运行良好,来自组的用户SomeGroup可以访问他们所需的数据PublicDb.

为了满足新应用程序的需求,我们希望为用户提供db SomeAppDb的显式访问权限DOMAIN\myUser,同时仍允许访问PublicDb.因此,我们在SQL Server中创建了一个Windows登录名DOMAIN\myUser,并在数据库中创建了一个User,并SomeAppDb在2之间进行了映射.

从那时起,myUser可以SomeAppDb按预期访问,但无法再访问PublicDb,我们遇到如下错误:

Cannot open database "PublicDb" requested by the login. The login failed.
Login failed for user 'DOMAIN\myUser'
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我,当用户访问SQL Server实例时,SQL Server会看到与Windows用户匹配的登录,并忽略用户所属组的现有登录.

一种方法是明确地为用户myUser在db PublicDb上添加访问权限,但我宁愿避免使用该解决方案,因为每次我们想要访问新用户时它都会强制更新PublicDb,这正是我们最初想要避免的... (我们这样做是临时修复,希望找到更好的选择).

还有其他人遇到过这个问题吗?有更好的方法吗?

提前致谢

sql-server active-directory sql-server-2008

5
推荐指数
1
解决办法
1996
查看次数

如何添加不属于消息模板的命名属性?

在某些情况下,我想在消息中添加上下文信息(例如当前已验证的用户),而不必将其包含在消息模板中

我想做到这一点:

logger.Information("Doing stuff {Foo} with the thing {Bar}. {User}", foo, bar, user)
Run Code Online (Sandbox Code Playgroud)

{User}模板中没有。

我已经知道了,LogContext但是将上下文信息添加到一个事件中似乎太过分了。

我也知道我可以使用低级API logger.Write(LogEvent evnt)来实际控制包括哪些属性,但是对于我要完成的工作来说似乎有点过多的代码。

我很确定有一种简短而优雅的方法非常明显,但是我还没有找到它:)

更新:

之后我才发现这个问题或多或少是相似的:向Serilog添加自定义属性

serilog

4
推荐指数
2
解决办法
1183
查看次数

消息类型:消息应包含多少信息?

我们目前开始将事件从一个中央应用程序广播到其他可能感兴趣的消费者应用程序,并且我们团队的成员对于应该在已发布的消息中放入多少内容有不同的选择。

总体思路/架构如下:

  • 生产者应用程序中:
    • 用户与一些可以创建/修改/删除的实体(DDD 意义上的聚合根)进行交互
    • 根据正在发生的情况,引发域事件(例如:EntityXCreated、EntityYDeleted、EntityZTransferred 等...即不仅是 CRUD,而且主要是)
    • 引发的事件被翻译/转换为我们发送到 RabbitMQ Exchange 的消息
  • RabbitMQ中 (我们正在使用 RabbitMQ,但我相信问题实际上与技术无关)
    • 我们为每个消费应用程序定义一个队列
    • 绑定将交换连接到消费者队列(可能带有消息过滤)
  • 消费应用程序中
    • 应用程序使用并处理队列中的消息

基于企业集成模式,我们正在尝试为我们发布的消息定义规范格式,并且在两种方法之间犹豫:

  1. 极简消息/ event-store-ish:对于域模型发布的每个事件,生成一条消息,其中仅包含相关的聚合根部分(例如,当更新完成时,仅发布有关更新部分的信息聚合根的,或多或少匹配最终用户在使用我们的应用程序时经历的过程)

    • 优点

      • 消息尺寸小
      • 非常专业的消息类型
      • 靠近“领域事件”
    • 缺点

      • 如果无法保证交付顺序,则会出现问题(即,如果在创建消息之前收到更新消息怎么办?)
      • 消费者需要知道要订阅哪些消息类型(可能需要一个大列表/领域知识)
      • 如果消费者状态和生产者状态不同步怎么办?
      • 如何处理未来注册但不了解所有过去事件的新消费者
  2. 完全包含的幂等消息:对于域模型发布的每个事件,生成一条消息,其中包含该时间点聚合根的完整快照,因此实际上只处理两种消息“创建或更新”和“删除”(+元数据,如有必要,包含更具体的信息)

    • 优点

      • 幂等(声明性消息指出“这就是事实,尽你所能同步自己”)
      • 需要维护/处理的消息格式数量更少
      • 允许逐步纠正消费者的同步错误
      • 只要生成的消息遵循规范数据模型,消费者就会自动处理新的领域事件
    • 缺点

      • 更大的消息负载
      • 不太纯净

您会推荐一种方法而不是另一种方法吗?

我们还应该考虑另一种方法吗?

domain-driven-design message-queue integration-patterns rabbitmq

4
推荐指数
1
解决办法
1015
查看次数

枚举数组的"通用"类型是什么?

我有一个方法,希望将参数作为自定义Enum类型数组.

看起来像这样的东西:

public void DoSomething(WhatDoIPutHere[] parameters)
Run Code Online (Sandbox Code Playgroud)

我想传递给这个方法a Enum1[]或者Enum2[]where Enum1Enum22 Enum种类型.

我需要使用什么而不是WhatDoIPutHere

我本来希望定义DoSomething的签名,因为Enum[]它以某种方式Enum是Enum类型的基类(对吧?):

public void DoSomething(Enum[] parameters)
Run Code Online (Sandbox Code Playgroud)

但它给出了:

无法从'xxx.Enum1 []'转换为'System.Enum []'

我也尝试将其定义为object[]但我得到了同样的编译器错误..

我知道这是完全臭的代码,如果我能,我肯定会摆脱它...

c# enums

3
推荐指数
1
解决办法
345
查看次数