当需要线程安全集合(例如Set)时,现在的标准是什么.我自己同步它,还是有固有的线程安全集合?
为什么ReSharper会在方法变为静态时抱怨,但不是?
是因为只创建了静态方法的一个实例(在类型上),从而节省了性能?
此代码生成FileNotFoundException,但最终运行没有问题:
void ReadXml()
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
//...
}
Run Code Online (Sandbox Code Playgroud)
这是一个例外:
mscorlib.dll中出现"System.IO.FileNotFoundException"类型的第一次机会异常
附加信息:无法加载文件或程序集"MyAssembly.XmlSerializers,Version = 1.4.3190.15950,Culture = neutral,PublicKeyToken = null"或其依赖项之一.该系统找不到指定的文件.
如果找不到,框架似乎会自动生成序列化程序集. 我可以使用sgen.exe手动生成它,这可以缓解异常.
如何让visual studio自动生成XML序列化程序集?
更新:生成序列化程序集:打开设置似乎没有做任何事情.
介绍
我知道"不允许在基类之间进行用户定义的转换".作为对此规则的解释,MSDN给出了"您不需要此运算符".
我确实理解不需要用户定义到基类的转换,因为这显然是隐式完成的.但是,我确实需要从基类转换.
在我目前的设计中,非托管代码的包装器,我使用指针存储在Entity类中.所有使用指针的类都派生自该Entity类,例如Body类.
因此我有:
方法A.
class Entity
{
IntPtr Pointer;
Entity(IntPtr pointer)
{
this.Pointer = pointer;
}
}
class Body : Entity
{
Body(IntPtr pointer) : base(pointer) { }
explicit operator Body(Entity e)
{
return new Body(e.Pointer);
}
}
Run Code Online (Sandbox Code Playgroud)
这个演员是非法的.(注意,我没有打扰写入访问器).没有它,编译器将允许我这样做:
方法B.
(Body)myEntity
...
Run Code Online (Sandbox Code Playgroud)
但是,在运行时,我会得到一个例外,说这个演员是不可能的.
结论
因此,我需要从基类进行用户定义的转换,而C#拒绝它给我.使用方法A,编译器会抱怨,但代码在运行时逻辑上可以工作.使用方法B,编译器不会抱怨,但代码在运行时显然会失败.
在这种情况下我觉得奇怪的是,MSDN告诉我我不需要这个运算符,并且编译器就像隐含的一样(方法B).我应该做些什么?
我知道我可以使用:
解决方案A.
class Body : Entity
{
Body(IntPtr pointer) : base(pointer) { }
static Body FromEntity(Entity e)
{
return new Body(e.Pointer);
} …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种解决相对URL的方法,就像你使用页面或控件实例(MSDN Docs)一样,例如:
Page.ResolveUrl("~/common/Error.aspx");
Run Code Online (Sandbox Code Playgroud)
...但是当我只有一个HttpContext可用时,例如当我在HttpHandler中时.
我是否需要使用自定义功能,例如此处显示的功能?
或者有没有办法获得Page使用的底层函数.
如何获取时代中的当前日期值,即1970-1-1以来经过的天数.我需要unix shell脚本中的解决方案.
我有一个属性是enum的类
枚举是
/// <summary>
/// All available delivery actions
/// </summary>
public enum EnumDeliveryAction
{
/// <summary>
/// Tasks with email delivery action will be emailed
/// </summary>
Email,
/// <summary>
/// Tasks with SharePoint delivery action
/// </summary>
SharePoint
}
Run Code Online (Sandbox Code Playgroud)
当我在代码中创建此类的实例NOWHERE时,我是否指定枚举字段的值,但它似乎默认为枚举列表中的第一项,而不是空值,这是枚举的工作原理吗?如果枚举没有设置,如何确保枚举得到某种空值,我不希望它默认为枚举中的第一个值.
我正在为一个大项目决定一个ORM,并决定选择ADO.NET实体框架,特别是它随.NET 4提供的新版本.在我搜索有关EF的信息时,我偶然发现了ADO .NET实体框架投票不信任,我不知道该怎么做.
2008年的某个时候写下了"不信任投票",以说服微软听取对EF v1的具体批评.
目前尚不清楚在"不信任投票"中提出的声明是否仍然有效(在.NET 4中)以及它们是否足够严重以至于使用其他解决方案.NHibernate是一个成熟的选择,但我不知道它带来了什么问题.我通常更倾向于使用Ms解决方案,主要是因为我可以指望与VS的集成以及他们的开发人员支持.
我将不胜感激例子在不信任的投票提到的问题是如何在现实世界中的项目的影响.更重要的是,那里的声明是否仍然与EF for .NET 4相关?