是否正确无法更改不可变对象的值?
我有两个关于readonly我想要理解的场景:
如果我有一个集合并将其标记为readonly,如下所示.我还能打电话_items.Add吗?
private readonly ICollection<MyItem> _items;
Run Code Online (Sandbox Code Playgroud)并且对于以下变量,如果稍后我调用_metadata.Change哪个将更改Metadata实例中的一个成员变量的内部值.是_metadata仍然不变?
private readonly Metadata _metadata;
Run Code Online (Sandbox Code Playgroud)对于上面的两个变量,我完全理解我不能在初始化器和构造器之外直接为它们分配新值.
我做一个sql查询,它返回一个字符串 - 服务名称.这是查询:
IQueryable<string> query = from Comp in ServiceGroupdb.ServiceGroupes
where (Comp.GroupID == groupID)
select Comp.Name;
Run Code Online (Sandbox Code Playgroud)
如何从查询中获取字符串?
我想测试一个非常简单的Code-First示例.我有一个被调用的类PurchaseItem,它不是从任何基类继承的,也没有其他类从它继承.它与其他模型完全无关:
public class PurchaseItem
{
public int Id { get; set; }
public string Buyer { get; set; }
public string Item { get; set; }
public int Quantity { get; set; }
public int Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的数据库上下文代码.我将数据库初始化程序设置为null,因为我已经有了数据库:
public class MiniContext : DbContext
{
public MiniContext()
{
Database.SetInitializer<MiniContext>(null);
}
public DbSet<PurchaseItem> PurchaseItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是保存记录的代码:
public void SavePurchaseItems(string buyer, string item, int quantity, int price)
{
PurchaseItem purchaseItem = …Run Code Online (Sandbox Code Playgroud) 大多数人都知道装饰图案的披萨/咖啡示例.
Pizza* pizza1 = BigPizzaDecorator(MushromDecorator(SimplePizza()));
Pizza* pizza2 = MushromDecorator(BigPizzaDecorator(SimplePizza()));
Run Code Online (Sandbox Code Playgroud)
这两个对象的行为方式类似,但并非完全,特别是如果您具有非交换操作,例如:
BigPizzaDecorator::price() { return 10 + PizzaDecorator::price(); } // this is commutative
BigPizzaDecorator::name() { return "big " + PizzaDecorator::name(); } // this is not commutative
Run Code Online (Sandbox Code Playgroud)
所以价格pizza1和pizza2是相同的,但名称不是,例如第一个应该是"Big mushroom pizza",第二个"Mushroom big pizza".第一个是英语正确(可能更好的是"蘑菇大披萨",但它并不那么重要).
"Head first"一书通过Cofee示例指出了这个问题:
当您需要在装饰器链中查看多个图层时,您开始将装饰器推到其真实意图之外.
然而,这样的事情是可能的.想象一下CondimentPrettyPrint装饰器解析最终的解释,可以打印"Mocha,Whip,Mocha"作为"Whip,Double Mocha".
最好的方法是什么?(operator<?)
使用XNode.DeepEquals()比较XML元素,它意外返回false的,我认为应该是等价的两个XML文档.
var xmlFromString = XDocument.Parse("<someXml xmlns=\"someNamespace\"/>");
var xmlDirect = new XDocument(new XElement(
XNamespace.Get("someNamespace") + "someXml"));
Console.WriteLine(xmlFromString.ToString());
Console.WriteLine(xmlDirect.ToString());
Console.WriteLine(XNode.DeepEquals(xmlFromString, xmlDirect));
Console.WriteLine(xmlFromString.ToString() == xmlDirect.ToString());
Run Code Online (Sandbox Code Playgroud)
<someXml xmlns="someNamespace" />
<someXml xmlns="someNamespace" />
False
True
Run Code Online (Sandbox Code Playgroud)
字符串被认为是相同的,但XML树不是.为什么?
我正在整理一个简单的应用程序,我使用FtpWebRequest上传,下载和删除文件.但我找不到如何使用FtpWebRequest移动文件.在不使用其他外部依赖的情况下,将文件从一个目录移动到另一个目录的最简单方法是什么?提前致谢.
linq-to-sql datacontext如何保持数据库连接打开的规则是什么?
当我们对SubmitChanges()每个更新的实体进行一些性能测试而不是SubmitChanges()整个批次实体的性能测试时,问题出现了.结果:
在一个SubmitChanges()调用中插入3000个项目...持续时间:1318ms
在Transactionscope中的一个SubmitChanges()调用中插入3000个项目...持续时间:1280ms
在各个SubmitChanges()调用中插入3000个项目......持续时间:4377ms
在事务中的单个SubmitChanges()调用中插入3000个项目...持续时间:2901ms
请注意,在SubmitChanges()为每个更改的实体执行单独操作时,将所有内容放在事务中可以提高性能,这对我们来说非常意外.在sql server profiler中,我们可以看到SubmitChanges()事务中的各个调用不会为每次调用重置数据库连接,而不是没有事务的调用.
在什么情况下数据上下文保持连接打开?有没有关于linq-to-sql如何处理连接的详细文档?
我想直接从TCP套接字将字节流式传输到磁盘上的文件.在Java中,可以使用NIO通道,特别是SocketChannel和FileChannel.引用FileChannel#transferFrom(...):
此方法可能比从源通道读取并写入此通道的简单循环更有效.许多操作系统可以直接从源通道将字节传输到文件系统缓存中,而无需实际复制它们.
显然,我可以编写标准的"复制循环"来读取和写入字节,甚至利用异步I/O来最小化等待.这可以与Java正在利用的平台本机功能相比,还是有另一种方法?
我在VS2010中有一个项目,它使用Web安装项目进行部署.我现在正在考虑将其迁移到VS2012,并且必须找到替换设置例程.
我的要求:
我应该从哪里开始?我应该看看VS2012中改进的发布功能吗?我应该看看Wix吗?别的什么?
c# ×8
.net ×7
c++ ×1
decorator ×1
ftp ×1
idisposable ×1
immutability ×1
installation ×1
iqueryable ×1
linq ×1
linq-to-sql ×1
linq-to-xml ×1
nio ×1
readonly ×1
tcp ×1
vb.net ×1
xml ×1