此代码将无法编译:
using System;
using System.Runtime.CompilerServices;
static class Extensions {
public static void Foo(this A a, Exception e = null, string memberName = "") {
}
public static void Foo<T>(this A a, T t, Exception e = null, string memberName = "")
where T : class, IB {
}
}
interface IB { }
class A { }
class Program {
public static void Main() {
var a = new A();
var e = new Exception();
a.Foo(e); //<- Compile error "ambiguous …Run Code Online (Sandbox Code Playgroud) 背景:我使用SimpleInjector作为IoC的WCF服务,它为每个WCF请求创建DbContext实例.
后端本身就是CQRS.CommandHandlers有很多装饰器(验证,授权,日志记录,不同处理程序组的一些通用规则等),其中一个是Transaction Decorator:
public class TransactionCommandHandlerDecorator<TCommand> : ICommandHandler<TCommand>
where TCommand : ICommand
{
private readonly ICommandHandler<TCommand> _handler;
private readonly IMyDbContext _context;
private readonly IPrincipal _principal;
public TransactionCommandHandlerDecorator(ICommandHandler<TCommand> handler,
IMyDbContext context, IPrincipal principal)
{
_handler = handler;
_context = context;
_principal = principal;
}
void ICommandHandler<TCommand>.Handle(TCommand command)
{
using (var transaction = _context.Database.BeginTransaction())
{
try
{
var user = _context.User.Single(x => x.LoginName == _principal.Identity.Name);
_handler.Handle(command);
_context.SaveChangesWithinExplicitTransaction(user);
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当任何命令尝试链接在同一WCF请求中执行另一个命令时,会出现问题.我在这一行得到了一个预期的例外:
using (var …Run Code Online (Sandbox Code Playgroud) 可以说我有子模块回购:
_git/DbModel (only source code indexed. No /bin or /obj folders)
Run Code Online (Sandbox Code Playgroud)
还有两个需要DbModel作为参考库的项目:
_git/TTT
_git/TPM
Run Code Online (Sandbox Code Playgroud)
我已经通过GitBash将DbModel作为子模块添加到它们中
git submodule add https://RepoPath/_git/DbModel
Run Code Online (Sandbox Code Playgroud)
我的本地回购现在看起来像这样:
Source\Repos\TTT\TTT.sln
Source\Repos\TTT\DbModel\DbModel.sln
Source\Repos\TPM\TPM.sln
Source\Repos\TPM\DbModel\DbModel.sln
Run Code Online (Sandbox Code Playgroud)
我的团队资源管理器显示了现在可用的两种不同的解决方案,我可以轻松切换它们.
但.也许这是一个新手问题......
我不知道如何添加DbModel解决方案作为TPM和TTT的参考!当我在VS中单击"添加引用" - >"浏览"时,我只能添加".dll,.tlb,.olb,.ocx,.exe,.manifest"作为"参考文件".
它应该如何工作?我应该每次编译子模块解决方案并添加.dll作为参考吗?我需要添加源代码.
我有一个查询,应该这样订购:
var list = new List<MonthClosureViewModel>();
var orderedList = list
.OrderByDescending(x => x.Project)
.ThenByDescending(x => x.ChargeLine)
.ThenByDescending(x => x.DomesticSite) //<- x.DomesticSite might be null sometimes
.ThenByDescending(x => x.ChargeSite) //<- x.ChargeSite might be null sometimes
.ThenByDescending(x => x.RateGroup)
.ThenByDescending(x => x.ApprovedHrs)
.ThenByDescending(x => x.NotApprovedHrs);
public class MonthClosureViewModel
{
public Project Project { get; set; }
public ChargeLine ChargeLine { get; set; }
public Site DomesticSite { get; set; }
public Site ChargeSite { get; set; }
public RateGroup RateGroup { get; …Run Code Online (Sandbox Code Playgroud) 让我们假设这段代码:
模块1:
Sub main()
Dim cl As New Class2
On Error GoTo errorhandler1
cl.DoWork
On Error GoTo 0
Exit Sub
errorhandler1:
MsgBox (Err.Description)
End Sub
Run Code Online (Sandbox Code Playgroud)
1类:
Event MyEvent()
Public Sub DoWork()
RaiseEvent MyEvent
End Sub
Run Code Online (Sandbox Code Playgroud)
等级2:
Private WithEvents cl As Class1
Private Sub cl_MyEvent()
Call Err.Raise(123, , "ErrorInClass")
End Sub
Private Sub Class_Initialize()
Set cl = New Class1
End Sub
Public Sub DoWork()
cl.DoWork
End Sub
Run Code Online (Sandbox Code Playgroud)
我希望启动errorhandler1并显示带有err.Description的MsgBox.但它反而引发了我的运行时错误.
我需要做些什么来处理EventHandlers例程中的错误?
我正在使用EntityFramework,我需要一些方法来将实体的传入列表与数据库同步(覆盖记录描述或将它们标记为过时):
public void Synchronize<T>(List<T> entityList)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
首先,我需要从相应的表中获取所有数据并获得两个列表之间的差异(一个不可更改的东西是条目的GUID).例如,如果传入的entityList的类型是User,那么我需要从"User"表等获取所有数据.
它不起作用:
var query = from entity in typeof(T)
select entity;
Run Code Online (Sandbox Code Playgroud)
当然我可以用旧的方式做到:
switch (typeof(T).Name)
{
case "User":
var query = from user in User
select user;
//Sync with User table
break;
case "Project":
var query = from project in Project
select project ;
//Sync with Project table
break;
}
Run Code Online (Sandbox Code Playgroud)
但也许有一种优雅的方式来处理通用?因为我有很多表要同步.谢谢!