如何实现结构以便执行以下转换?
var a = new StatusedValue<double>(1, false);
var b = (StatusedValue<int>)a;
Run Code Online (Sandbox Code Playgroud)
我的实现应该表现得相似Nullable<T>
,哪种方式正常.但是,此代码失败System.InvalidCastException
:
public struct StatusedValue<T> where T : struct
{
public StatusedValue(T value) : this(value, true)
{
}
public StatusedValue(T value, bool isValid)
{
this.value = value;
this.isValid = isValid;
}
private T value;
private bool isValid;
public static implicit operator StatusedValue<T>(T value)
{
return new StatusedValue<T>(value);
}
public static explicit operator T(StatusedValue<T> value)
{
return value.value;
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
无法将"StatusedValue`1 [System.Double]"类型的对象强制转换为"StatusedValue`1 [System.Int32]".
有没有办法可以改善这种SQL查询性能:
INSERT
INTO ...
WHERE NOT EXISTS(Validation...)
Run Code Online (Sandbox Code Playgroud)
问题是当我的表中有很多数据(如数百万行)时,WHERE NOT EXISTS
如果非常慢,则执行该子句.我必须进行此验证,因为我无法插入重复数据.
我使用SQLServer 2005
谢谢
我正在使用javafx表视图控件来显示我的表数据.现在数据非常庞大,当我在控件中显示完整数据时,它会崩溃.有没有办法这样做或者我必须缓存数据,以便我可以以块的形式显示它.我应该使用JTable吗?
我们已经在我们的应用程序(现在的MVC 4)中使用了Autofac很长一段时间,我们在基本控制器上有很多属性,一切都是继承的,并且一切正常,所以当请求开始时我们的服务被创建然后通过所有属性和控制器操作.
我们现在正在查看WebApi并创建了我们的WebApi控制器,并使用HTTP命名空间中的ActionFilterAttribute在基本控制器上创建了一个属性.但是问题从这里开始,在属性上的属性上注入的服务与ApiController上的服务不同.查看下面的链接,这似乎是已知的ASP.NET Web API和请求范围中的依赖项
然而,这里的解决方案并不理想,因为我们不希望我们的控制器知道依赖注入,我们只想使用我们注入属性的服务并知道它是每个请求一个实例.
我们称之为:
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
Run Code Online (Sandbox Code Playgroud)
和
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)
我们的课程目前在Autofac注册为InstancePerLifetimeScope,我们想要的是能够满足MvcControllers和ApiControllers的每个请求.
那可能吗?
编辑:
所以基本上这行返回了请求的正确服务(即同样在ApiController上的实例)
var service = actionContext.Request.GetDependencyScope().GetService(typeof(IOurService);
Run Code Online (Sandbox Code Playgroud)
但是ActionFilterAttribute上的属性注入实例是不一样的,如果我将Autofac注册更改为InstancePerApiRequest,我会收到以下错误:
"从请求实例的作用域中看不到具有匹配'AutofacWebRequest'的标记的作用域.这通常表示SingleInstance()组件(或类似场景)正在请求按HTTP请求注册的组件.在Web集成下,总是从DependencyResolver.Current或ILifetimeScopeProvider.RequestLifetime请求依赖,而不是从容器本身请求."
有没有简单的方法可以将断点复制/移动到Visual Studio中的另一行?
在某些情况下,断点可能包含某些条件,跟踪等,并且在调试会话期间不容易复制/移动断点。
我现在看到的唯一解决方案是通过导入/导出,这实际上是不能接受的。
在 Visual Studio 中,我可以通过右键单击 -> 构建来构建按解决方案文件夹分组的多个项目。
是否有任何命令行/电源 shell 替代方案?
原始问题有点不正确,因为问题只发生在控制器测试期间如何在枚举IEnumerable失败时返回正确的状态代码.ASP.NET WebApi
问题是如何正确测试web api控制器,当IEnumerable在延迟执行期间可能抛出异常时,它返回IEnumerable?
例如,我有这样的API端点:
public class EntityController : ApiController
{
...
public IHttpActionResult Get()
{
return Ok(Session.Query<Entity>());
}
}
Run Code Online (Sandbox Code Playgroud)
无论在查询执行期间可能抛出异常,相应的测试都将始终通过.
[Test]
public async Task Test()
{
var entityController = new EntityController(Session)
{
Configuration = new HttpConfiguration(),
Request = new HttpRequestMessage()
};
var response = await entityController.GetAll().ExecuteAsync(new CancellationTokenSource().Token);
response.EnsureSuccessStatusCode();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果在控制器本身内部转换ToList,则此测试将不会通过.
public class EntityController : ApiController
{
...
public IHttpActionResult Get()
{
return Ok(Session.Query<Entity>().ToList());
}
}
Run Code Online (Sandbox Code Playgroud) c# ×4
asp.net-mvc ×2
performance ×2
.net ×1
asp.net ×1
autofac ×1
breakpoints ×1
casting ×1
command-line ×1
debugging ×1
generics ×1
java ×1
javafx ×1
javafx-2 ×1
linq ×1
not-exists ×1
powershell ×1
sql ×1
sql-server ×1
struct ×1
tableview ×1
where-clause ×1