我想转换&为&,"到"等等.在没有手动编写所有选项的情况下,c#中是否有一个函数可以做到这一点?
我想我需要一些帮助来理解静态对象如何在ASP.Net应用程序中持续存在.我有这种情况:
类库中的someFile.cs:
public delegate void CustomFunction();
public static class A {
public static CustomFunction Func = null;
}
Run Code Online (Sandbox Code Playgroud)
类库中的someOtherFile.cs:
public class Q {
public Q() {
if (A.Func != null) {
A.Func();
}
}
}
Run Code Online (Sandbox Code Playgroud)
一些ASP.Net页面:
Page_Init {
A.Func = MyFunc;
}
public void MyFunc() {
System.IO.File.AppendAllText(
"mydebug.txt", DateTime.Now.ToString("hh/mm/ss.fff", Session.SessionID));
}
Page_Load {
Q myQ = new Q();
System.Threading.Thread.Sleep(20000);
mQ = new Q();
}
Run Code Online (Sandbox Code Playgroud)
我的想法是,我有一个业务对象,它根据UI级别的回调函数执行一些操作.我将回调函数设置为Page_Init上的静态变量(在实际代码版本中,在主页面中,如果这有所不同).我认为页面的每次执行,无论它来自哪个用户会话,都会通过该函数的逻辑,但是在自己的数据集上运行.似乎正在发生的是并发问题.
如果我运行一个用户会话,那么当它在对该回调函数的调用之间休眠时,启动另一个用户会话,当第一个会话从休眠状态返回时,它从第二个用户会话中获取会话ID.这怎么可能?
mydebug.txt的输出:
01/01/01.000 abababababab (session #1, first call)
01/01/05.000 cdcdcdcdcdcd (session #2, first call - …Run Code Online (Sandbox Code Playgroud) 在数据库迁移期间,我遇到了以下形式的数据库表约束:
ALTER TABLE [dbo].[myTable]
ADD CONSTRAINT [someName] FOREIGN KEY ([id]) REFERENCES [dbo].[myTable] ([id])
ON DELETE NO ACTION
ON UPDATE NO ACTION
Run Code Online (Sandbox Code Playgroud)
为什么会这样做?这最初是在Sybase数据库上完成的,我们正在转换为SQL Server 2008 R2.
更新:是的,外键约束是引用相同表和相同字段的字段.
我在源Sybase数据库上运行了这个查询,发现定义了42个这些疯狂的键,所以它似乎不是一个错字.
SELECT sr.constrid as [Constraint ID],
so.name as [Table],
sc.name as [Column]
FROM sysreferences sr
INNER JOIN sysobjects so ON (so.id = sr.tableid)
INNER JOIN syscolumns sc ON (sc.id = sr.tableid AND sc.colid = sr.fokey1)
WHERE sr.tableid = sr.reftabid
AND sr.fokey1 = sr.refkey1
AND sr.fokey2 = 0
AND sr.refkey2 = 0
Run Code Online (Sandbox Code Playgroud) 一旦变量失去.Net语言的范围,有没有办法"自动"运行终结/析构函数代码?在我看来,由于垃圾收集器在不确定的时间运行,因此一旦变量失去范围,析构函数代码就不会运行.我意识到我可以从IDisposable继承并在我的对象上显式调用Dispose,但我希望可能有更多不干涉的解决方案,类似于non.Net C++处理对象破坏的方式.
期望的行为(C#):
public class A {
~A { [some code I would like to run] }
}
public void SomeFreeFunction() {
SomeFreeSubFunction();
// At this point, I would like my destructor code to have already run.
}
public void SomeFreeSubFunction() {
A myA = new A();
}
Run Code Online (Sandbox Code Playgroud)
不太理想:
public class A : IDisposable {
[ destructor code, Dispose method, etc. etc.]
}
public void SomeFreeFunction() {
SomeFreeSubFunction();
}
public void SomeFreeSubFunction() {
A myA = new A();
try { …Run Code Online (Sandbox Code Playgroud) 在C#中,是否有任何语法糖可以在单个语句中执行以下操作(基本上是有条件的返回):
public SomeBaseType MyFunction()
{
// Can the two statements below be combined into one?
SomeBaseType something = SomeFunction();
if ( something != null ) { return something; }
// End of statements regarding this question.
// Do lots of other statements...
return somethingElseThatIsADerivedTypeThatDoesntMatter;
}
Run Code Online (Sandbox Code Playgroud)