我的问题相对简单,我感觉方法GetUninitializedObject(type)不生成给定类型的新实例而不调用任何构造函数但生成一个新的Object,其行为与正确的一样(具有相同的结构)和显然有相同的类型(但内部仍然是一个对象).
我说是因为最近我尝试使用GetUninitializedObject克隆一个Form.Button来生成我在该操作中需要的类型的新实例(我在源对象上递归操作),我的结果具有正确的结构(和即时窗口)也说它有正确的类型)但如果我尝试做MyForm.Components.Add(clonedButton)我收到一个带有消息的异常:"无法将'System.Object'类型的对象强制转换为'ControlCollection'"(但是我已经检查了clonedButton类型是Button,它的继承也是正确的,手动我检查几乎所有的结构,在克隆按钮内,并匹配源Button对象,我已访问pubblic和private字段).
所以这就是为什么我的问题(因为我在javascript中有类似的问题,在同一个克隆上下文中我生成对象形式基础对象然后添加具有正确名称和结构的字段,编译器发现我的技巧看着什么是调用每个实例的构造函数,所以我认为它可能是一个类似的情况),如果有人能解释我GetUninitializedObject()背后的魔法它应该帮助很多(提前谢谢).
我正在使用POP3协议在我的.NET应用程序中检索我的电子邮件.我只需阅读新的电子邮件,但在许多博客中发现,使用POP3无法检索"看不见"或"新"的邮件.真的吗?如果是这样,您能否帮我理解Outlook Express如何使用POP3获取新邮件?
有什么方法可以在电子邮件服务器本身标记所看到的邮件吗?或者请帮我找到一种使用POP3协议检索新邮件的方法.
实际上我想通过邮件唯一ID删除邮件消息(我使用ActiveUp.Net.Mail.Pop3Client)
为此,我使用以下代码:
private void DeleteMessageByUID ( string uid , Pop3Client popClient )
{
for (int i = 1; i <= popClient.MessageCount; i++)
{
Header email = popClient.RetrieveHeaderObject(i);
if (email.MessageId == uid )
{
popClient.DeleteMessage(i);
break;
}
}
popClient.Disconnect();
}
Run Code Online (Sandbox Code Playgroud)
但从我删除所有邮件(最初邮件从邮箱中消失)开始大约两个小时后,我将能够找到它们(与之前删除的邮件具有相同的 UID)。
我不确定问题的原因是否在我的程序中,我猜是邮箱配置错误,但在联系系统管理员之前我会确定这一点。
我正在使用反射调用带参数的方法(准确地说是动态的)。编译时方法参数与传入参数匹配时调用没有问题;但是如果我使用基本类型(在签名中,在运行时类型总是匹配),如果运行时参数匹配,我会得到错误(在运行时)。
下面的例子:
public class WorkerAbstraction
{
object _actualWorker = null;
public WorkerAbstraction (object actualWorker)
{
_actualWorker = actualWorker;
}
public void DoWorkAbs ( AbstractBaseClass args )
{
((dynamic)_actualWorker).DoWork (args); //--> here is where the exception is rised
}
}
public class ActualWorker<T> where T : AbstractBaseClass
{
public void DoWork ( T args )
{
...
}
}
public class Person : AbstractBaseClass { ... }
Run Code Online (Sandbox Code Playgroud)
现在,如果我以这种方式测试上面的代码:
WorkerAbstraction wab = new WorkerAbstraction ( new ActualWorker<Person> () );
Person person = …Run Code Online (Sandbox Code Playgroud) 我知道 SELECT + INSERT 是一种不好的做法,可能会导致竞争条件(当一些尝试实现 upsert 行为时从插入更新反模式中学到)。
但我不知道如何避免这种情况,当我只是将数据插入表中,而没有给定列(或列的元组)的重复数据时:
IF NOT EXISTS ( SELECT TOP(1) 1 FROM [tbl_myTable] WHERE [MyNotKeyField] = 'myValue' )
BEGIN
INSERT INTO [tbl_myTable] (...) VALUES (...)
END
Run Code Online (Sandbox Code Playgroud)
我应该创建一个唯一索引并尝试插入记录吗?恐怕在这种情况下,插入失败的开销可能会更大。
PS:我从客户端应用程序(与 SQL Server 连接的 C# 应用程序)发送该命令,因此我认为临时表和 MERGE 的使用是不可能的。
我有一个对象IQueryable,代表我的db-model上的一些查询.现在我需要对那个IQeryable进行一些验证并以这种方式返回对象
private IQuerable<myTableType> ValidateQery ( IQuerable<myTableType> query , string user )
{
return query.Where ( x => db.tblUsers.Where( y => y.User == user && y.Privilege >= x.PrivilegeRequired).Any() )
}
Run Code Online (Sandbox Code Playgroud)
现在我想了解的是,如果Any()子句是immidatly执行的,或者它是否生成将与之前合并的T-SQL.我问这个因为我不应该在那一刻避免对db执行查询.
编辑:感谢'using'子句的建议,这是我现在做的一个错误(编写这个代码示例),因为我现在无法测试代码(我这时机器上没有可视化工作室)但是我的问题一般是关于那种情况.
c# ×5
pop3 ×2
casting ×1
clone ×1
inheritance ×1
insert ×1
iqueryable ×1
linq ×1
sql ×1
sql-server ×1