我在TFS中删除了一些文件和一些文件夹.很多签入后来我发现我需要在我的项目中删除已删除的功能.
如何恢复已删除的文件和文件夹?
使用String.Format()它可以以DateTime许多不同的方式格式化例如对象.每当我寻找所需的格式时,我都需要在互联网上搜索.我几乎总能找到一个可以使用的例子.例如:
String.Format("{0:MM/dd/yyyy}", DateTime.Now); // "09/05/2012"
Run Code Online (Sandbox Code Playgroud)
但我不知道它是如何工作的以及哪些类支持这些"魔术"附加字符串.
所以我的问题是:
String.Format将附加信息映射MM/dd/yyyy到字符串结果?String.Format("{0:MyCustomFormat}", new MyOwnClass())如何检测对象是否被锁定?
Monitor.TryEnter(如有没有办法检测对象是否被锁定?)对我不起作用,因为它锁定了对象(如果没有锁定).
我只是想检查,如果它被锁定,其他地方在我的代码,我将使用Monitor类锁定对象.
我知道可以使用例如布尔字段(例如private bool ObjectIsLocked)但是使用锁定对象本身来检测它.
下面的示例代码显示了我想要做的事情:
private static object myLockObject = new object();
private void SampleMethod()
{
if(myLockObject /*is not locked*/) // First check without locking it
{
...
// The object will be locked some later in the code
if(!Monitor.TryEnter(myLockObject)) return;
try
{
....
}
catch(){...}
finally
{
Monitor.Exit(myLockObject);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下C#代码:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);
Run Code Online (Sandbox Code Playgroud)
但它抛出以下编译错误:
运算符
??不能应用于类型string和的操作数System.DBNull
为什么编译器不允许这种语法?
我在visual studio 2010中编写单元测试.
为了测试一些功能,我添加了一个带有testfiles的文件夹.
我需要以编程方式获取此文件夹,而不需要字符串中的硬路径.
该文件夹包含在 <projectDirectory>/TestFiles
我试过用AppDomain.CurrentDomain.BaseDirectory.这只有在我用resharper运行我的单元测试时才有效.
结果是<projectDirectory>/bin/debug这样我可以很容易地去TestFiles.
如果我使用visual studio运行测试,BaseDirectory是:
<sameFolderAsSolutionFile>\TestResults\<username>_<pcname> <datatime>\Out
我已将解决方案文件移至另一个文件夹.所以我的项目与我的解决方案文件不在同一个文件夹中.
例:
<sameFolderAsSolutionFile> = C:\SolutionFiles
<projectDirectory> = C:\Projects\MyProject
有人能告诉我如何在不使用硬编码字符串的情况下获取测试文件的路径吗?
编辑
我还没有找到解决方案.
Visual Studio正在使用另一个构建文件夹进行测试.因此,通常构建到bin文件夹中的所有内容都将构建到另一个文件夹中以进行测试.
我的TEMP-SOLUTION
我在我的测试项目中添加了一个App.config文件.在此配置文件中,我添加了一个包含测试文件所需路径的设置:
<appSettings>
<add key="TestFiles" value="C:\Projects\MyProject\TestFiles"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud) 我有SQL性能问题.出于突发原因,以下查询非常缓慢:
我有两个列表,其中包含某个表的Id.如果Id已存在于第二个列表中,我需要删除第一个列表中的所有记录:
DECLARE @IdList1 TABLE(Id INT)
DECLARE @IdList2 TABLE(Id INT)
-- Approach 1
DELETE list1
FROM @IdList1 list1
INNER JOIN @IdList2 list2 ON list1.Id = list2.Id
-- Approach 2
DELETE FROM @IdList1
WHERE Id IN (SELECT Id FROM @IdList2)
Run Code Online (Sandbox Code Playgroud)
这两个列表可能包含超过10,000条记录.在这种情况下,两个查询都需要超过20秒才能执行.
执行计划也显示了一些我不理解的东西.也许这就解释了为什么它如此缓慢:

我用10,000个连续的整数填充了两个列表,因此两个列表都包含值1-10.000作为起始点.
正如您所看到的,两个查询显示@ IdList2 实际行数为50.005.000 !!.@ IdList1是正确的(实际行数是10.000)
我知道还有其他解决方案如何解决这个问题.就像填写从第一个列表中删除的第三个列表一样.但我的问题是:
为什么这些删除查询这么慢,为什么我会看到这些奇怪的查询计划?
sql sql-server performance table-variable sql-execution-plan
目前我正在开发一个我们正在编写面向对象的JavaScript的项目.在这个项目中,我看到了两种不同的定义类的方法:
1:在原型上一次声明函数
My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};
My.Namespace.ClassName.prototype = {
myFunction1: function() {
return this.member1 + " " + this.member2;
},
myFunction2: function(param1) {
this.member3 = paraml;
}
};
Run Code Online (Sandbox Code Playgroud)
2:准备原型上的每个功能
My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};
My.Namespace.ClassName.prototype.myFunction1 = function() {
return this.member1 + " " + this.member2;
};
My.Namespace.ClassName.prototype.myFunction2 = function(param1) {
this.member3 = paraml;
};
Run Code Online (Sandbox Code Playgroud)
基于两个给定的示例,JavaScript的行为方式有什么不同,还是仅仅是样式差异?
就个人而言,我没有看到任何行为差异,但我觉得必须有一个微妙的差异,我目前缺少.
除此之外.我想知道这是一种常见的做法,还是有更好的方法来定义类.
我有以下方法:
public static T ExecuteScalar<T>(
string query,
SqlConnection connection,
params SqlParameter[] parameters) where T : new()
{
// Create SqlCommand
SqlCommand command = CreateCommand(query, connection, parameters);
// Execute command using ExecuteScalar
object result = command.ExecuteScalar();
// Return value as expected type
if (result == null || result is DBNull) return default(T);
return (T)result;
}
Run Code Online (Sandbox Code Playgroud)
我希望MIN_ACTIVE_ROWVERSION将数据库作为一个ulong.奇怪的是..下面的第一个方法调用生成错误,但第二个方法调用工作正常.
方法调用1生成错误:
ulong minActiveRowversion =
SqlUtils.ExecuteScalar<ulong>(
"SELECT CAST(MIN_ACTIVE_ROWVERSION() AS BIGINT)"
, _connectionString);
Run Code Online (Sandbox Code Playgroud)
错误:
System.InvalidCastException: Specified cast is not valid.
Run Code Online (Sandbox Code Playgroud)
方法调用2工作正常: …
我想知道在C#中定义多维数组的两种方法有什么区别.
您可以使用object[][]和object[,]处理多维数组.
有功能差异吗?
我写了以下代码:
static readonly object failedTestLock = new object();
public static Dictionary<string, Exception> FailedTests
{
get
{
lock (failedTestLock)
{
return _failedTests;
}
}
set
{
lock (failedTestLock)
{
_failedTests = value;
}
}
}
public void RunTest(string testName)
{
try
{
//Run a test
}
catch (Exception exception)
{
// ?? Is this correct / threadsafe?
FailedTests.Add(testName, exception);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
这是否是将失败的测试安全地添加到词典中的正确方法?
这线程安全吗?
是FailedTests.Add调用INSIDE锁定还是OUTSIDE锁定?
你能解释为什么这是正确的/线程安全的,或者为什么不呢?
提前致谢
c# ×7
.net ×3
locking ×2
.net-4.0 ×1
dbnull ×1
directory ×1
javascript ×1
mstest ×1
oop ×1
operators ×1
performance ×1
properties ×1
prototype ×1
sql ×1
sql-server ×1
string ×1
tfs ×1
tfs2008 ×1
tfs2010 ×1
tfs2012 ×1
tfs2013 ×1
unit-testing ×1
vb.net ×1