在源代码管理中排除/包含VS 2015解决方案的.vs文件夹的最佳做法是什么?
在初始构建/编辑之后,我只看到目前在'[Root] /.vs/[SolutionName] /v14/.suo'创建的.suo文件,所以我假设它是旧的'[SolutionName]的替代品.suo'并且应该被排除(通常) - 但是在我可能想要版本的某些场景中是否会放置其他设置/等?
从这个 uservoice,我猜测答案是它应该被忽略,只是在我更新所有机器设置之前需要确认,因为我没有在任何本地文档中看到它.
对于只具有可空属性的实体框架中的复杂类型,为什么对于类似下面的内容需要实例化复杂类型:
[ComplexType]
public class Address {
public string Address1 { get; set; }
}
public class Customer {
[Key]
public int CustomerId {get;set;}
public Address Address {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,如果您没有声明和地址类型,则会得到"非可空成员的空值.成员:'地址'." 按照这个问题.
只要复杂类型中的所有属性都可以为空,为什么实体框架需要一个Address实例?由于Address1可以为空,为什么它不能只假设并在行中创建表(和列Address_Address1)和空值,就好像我创建了一个具有空Address1的Address实例?
或者是否有我可以应用的属性/流畅设置来实现这一目标?
对于这样的场景:
public interface IAnimal
{
}
public interface IGiraffe : IAnimal
{
}
public interface IQuestionableCollection : IEnumerable<IAnimal>
{
void SomeAction();
}
public interface IQuestionableCollection<out T> : IQuestionableCollection, IEnumerable<T>
where T : IAnimal
{
}
public class QuestionableCollection<T> : IQuestionableCollection<T>
where T:IAnimal
{
// Implementation...
}
Run Code Online (Sandbox Code Playgroud)
编译器将生成错误:
'IQuestionableCollection<T>' cannot implement both 'System.Collections.Generic.IEnumerable<IAnimal>' and 'System.Collections.Generic.IEnumerable<T>' because they may unify for some type parameter substitutions
Run Code Online (Sandbox Code Playgroud)
这是有道理的,C#无法解决的两个接口之间确实存在歧义,除非它使用类型约束,而不是像@ericlippert 在这里解释的语言规范那样.
我的问题是我应该如何在这里实现同样的效果呢?
似乎我应该能够表达该集合对于基本接口是可枚举的.(我想提供一组可以在不知道具体类型的情况下使用的方法,以及它使一些API /反射代码更清晰,所以我想将基本集合保持为非通用的,如果有的话可能.否则,就不需要两个接口.)
我能想到的唯一可编程实现类似于:
public interface IQuestionableCollectionBase
{
void SomeAction();
}
public interface IQuestionableCollection …
Run Code Online (Sandbox Code Playgroud) 我正在寻找在WebApi中处理继承类型的模型绑定,我真正想要做的是使用默认模型绑定来处理绑定(除了选择它无法执行此操作的类型),但我我错过了一些基本的东西.
所以说我有类型:
public abstract class ModuleVM
{
public abstract ModuleType ModuleType { get; }
}
public class ConcreteVM : ModuleVM
{
}
Run Code Online (Sandbox Code Playgroud)
使用MVC控制器,我会做这样的事情:
public class ModuleMvcBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
if (modelType == typeof(ModuleVM))
{
// Just hardcoding the type for simplicity
Type instantiationType = typeof(ConcreteVM);
var obj = Activator.CreateInstance(instantiationType);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, instantiationType);
bindingContext.ModelMetadata.Model = obj;
return obj;
}
return base.CreateModel(controllerContext, bindingContext, modelType);
}
}
[AttributeUsage( AttributeTargets.Class | AttributeTargets.Enum | …
Run Code Online (Sandbox Code Playgroud) 当尝试通过conda安装pymc时,我收到以下内容:
C:\ Anaconda> conda install -c https://conda.binstar.org/pymc pymc获取包元数据:...错误:找不到匹配的包:pymc
安装来自pymc分发页面:https://binstar.org/pymc/pymc
我目前的anaconda版本是最新的:
C:\ Anaconda> conda update --prefix C:\ Anaconda anaconda获取包元数据:..解决包规范:.#已安装所有请求的包.
在C:\ Anaconda环境中的#包:
#
anaconda 1.9.2 np18py27_0
所以作为康达新手,我不太清楚我错过了什么.也许我必须首先授权binstar?(我相信没有代理问题.)
非常感谢您的建议!
我经常发现自己写的是这样的:
var fields = _type.GetProperties()
.Select(prop => new { Prop = prop, Attrib = prop.GetCustomAttribute<ColumnAttribute>() })
.Where(t => t.Attrib != null)
.ToList();
Run Code Online (Sandbox Code Playgroud)
我感到困扰的是,在where子句失败的情况下,我不必要地创建对象.虽然开销很小,但我仍然更愿意保存分配,就像我只是简单地循环它或者做得更痛苦一样:
var fields = _type.GetProperties()
.Select(prop =>
{
var attrib = prop.GetCustomAttribute<ColumnAttribute>();
return attrib == null ? null : new {Prop = prop, Attrib = attrib};
})
.Where(t => t != null);
Run Code Online (Sandbox Code Playgroud)
我缺少更好的模式/扩展方法吗?或者LINQ可以在封面下进行优化吗?
非常感激!
更新:
我想这是我的意思,但我期待已经存在的东西已经存在,我只是在寻找不好的东西:
public static IEnumerable<TResult> SelectWhereNotNull<TSource, TValue, TResult>(this IEnumerable<TSource> source, Func<TSource, TValue> valueSelector, Func<TSource, TValue, TResult> selector)
where TValue:class
where TResult:class
{
return source …
Run Code Online (Sandbox Code Playgroud) 如何将一个对象保留在内存中,以使它不会被.Net中的OS分页?
即类似于VirtualLock的东西,但是在对象上进行操作,这样,如果进行压缩并且移动了对象,它仍然不会被调出页面,依此类推。(我想可以固定对象的对象,确定它属于哪个页面,并且然后使用VirtualLock锁定这些页面,但是由于许多原因,这似乎是不希望的。)
如果可能的话,您能给我指个参考或工作样本吗?(理想的C#)
简而言之,我相信我所追求的是一种为MVC4局部视图中的敲除绑定/ javascript对象提供范围/上下文的方法,这样我可以重用相同的部分而不会让它们相互干扰,但仍然能够客户端的引用父子视图模型.
作为淘汰赛菜鸟很有可能(而且更广泛的是网络开发)我在这里缺少一个常见的javascript概念模式,但我遇到的场景非常类似于以下内容.我在服务器上有一个viewmodel,让我们说:
public class MainModel
{
// Other fields
SubviewModel Subview { get; set}
}
public class SubviewModel
{
// Relevant subview fields
}
Run Code Online (Sandbox Code Playgroud)
然后在强类型(主)部分视图中,我呈现我需要的任何内容,并通过@ Html.Action将子视图模型传递到强类型部分(在服务器上).在这两种情况下,我都是通过做这样的事情来设置淘汰赛:
var mvcModel = ko.mapping.fromJS(@Html.Raw(JsonConvert.SerializeObject(this.Model)));
ko.applyBindings(mvcModel , document.getElementById("@("divSubview"+Model.Guid)"));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,divSubview将是部分的主要包装div,一切都通常绑定得很好 - 差不多.
Model.Guid连接是为了解决第一个问题,即这些部分通常在不同视图模型的页面上呈现几个.(把它想象成一个项目列表,一个待办事项列表或诸如此类的东西,每个项目都有可能改变的子内容 - 你得到了这个想法,可能在我试图进一步解释之前......)所以当多个局部渲染在同一页面上时,如果div没有唯一命名,如果我通过document.getElementById调用applyBindings,我最终将第二个viewModel应用于具有该名称的第一个渲染div.
第二个问题是相关的,因为当我渲染主要部分(对于给定页面有多个),然后是子视图时,我经常想要引用子视图中的主视图模型或同样.我一直在使用的解决方法是设置一个命名的全局参数,然后使用它来回传递,因为我知道脚本将按顺序执行 - 但这非常hacky.
那么我错过了什么是正确的解决方案?
我知道我可以使用Knockout的模板和一个更大的视图模型,最终可能是正确的解决方案,但是现在MVC部分(紧密耦合到服务器)有很多事情我不愿意给出起来.(其次我试图将部分内容尽可能松散地连接起来 - 至少在客户端上 - 即使我在绑定/等方面受到一点性能影响.)
(我认为)我真正想要的是将某种形式的范围传递给partials的方法,以便subview partial将引用主要的部分viewmodel(同样),而不必污染全局命名空间或使用unique名.有没有办法让我说一个客户端JS变量,它会引用子/父部分中的对象?(或者我完全忽略了这一点,还有更好的方法吗?)
是否可以扩展 resharper 代码检查/注释来处理您知道静态正确的情况?
例如,我知道效用函数满足某些条件,例如:
static public bool IsValid(double? d)
{
return d != null && IsValid(d.Value);
}
static public bool IsValid(double d)
{
return !Double.IsNaN(d) && !Double.IsInfinity(d);
}
Run Code Online (Sandbox Code Playgroud)
因此,这确保了可空值具有值,并且我希望“Possible System.InvalidOperationException”检查不会因以下情况而触发:
if (Utils.IsValid(nullableValue))
{
DoSomethingWith(nullableValue.Value);
}
Run Code Online (Sandbox Code Playgroud)
当然我可以取消检查/等,但是是否可以扩展静态类型以表明这实际上可以确保该值不可为空?
(我想一个相关但过于笼统的问题是我应该使用另一个静态类型检查而不是可能处理它的 resharper,但我不会因为担心过于宽泛而要求!)
我正在使用通用IDbCommand函数(在非SqlCommand帮助器方法中)将SqlCommand.DbType设置为DbType.Date,类似于以下内容:
var param = command.CreateParameter();
param.DbType = DbType.Date;
param.ParameterName = field;
param.Value = ToDb(val);
command.Parameters.Add(param);
Run Code Online (Sandbox Code Playgroud)
并将生成的param.DbType覆盖为DbType.DateTime。(我故意想要SqlDbType.Date,因为列/索引是Sql Server类型的Date,而不是DateTime。)果然,当我反编译时,我看到SqlParameter.DbType设置调用了MetaType.GetMetaTypeFromDbType,它具有以下功能:
internal static MetaType GetMetaTypeFromDbType(DbType target)
{
switch (target)
{
...
case DbType.Date:
case DbType.DateTime:
return MetaType.MetaDateTime;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,强制转换是有意的,相反,我必须做一些骇人听闻的事情,例如:
var param = command.CreateParameter();
var sqlParam = param as SqlParameter;
if (sqlParam != null)
{
sqlParam.SqlDbType = SqlDbType.Date;
}
else
{
param.DbType = DbType.Date;
}
param.ParameterName = field;
param.Value = ToDb(val);
command.Parameters.Add(param);
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么要强制转换?这是从早期版本的Sql Server / framework继承而来的,在早期版本中也许不存在Date,并且可以合理地假设人们不知道DbType.Date和DbType.DateTime之间的区别?还是发生了一些更根本的事情?
没有没有特殊大小写SqlParameter的实际解决方法?
(今天早上搜索时,我发现很少有参考文献,所以也许在另一轮咖啡因之前我只是缺少了一些明显的东西?总是感谢!)
c# ×7
.net ×2
anaconda ×1
dbcommand ×1
generics ×1
javascript ×1
knockout.js ×1
linq ×1
pymc ×1
resharper ×1
sql-server ×1
sqlcommand ×1
windows ×1