我有一个C#类库项目作为我的解决方案的一部分.我后来更新了项目的根文件夹.由于解决方案指向错误的路径,我不得不"删除"项目,然后重新添加它.但是,当我添加现有项目时,它说"项目文件\ myproject.csproj"已被移动,重命名或不在您的计算机上".
这令人困惑,因为.sln文件没有对项目的引用.(我检查了文本内容)VS如何用它的旧文件夹路径缓存项目?该解决方案是在TFS中进行版本控制的,但映射指向新的文件夹结构,因此它在尝试获取旧文件夹路径的位置更加令人困惑.
编辑:我检查了.csproj文件,.csproj.vspscc,其中没有一个包含路径变量.我也尝试删除.suo文件.
我知道这样做(myValue ?? new SomeClass())
很像(myValue == null ? new SomeClass() : myValue)
但出于好奇,当我调用一个函数时,是否有任何性能优势
(getResult() ?? new SomeClass())
.会getResult()
被执行两次吗?这似乎不直观,因为我只指定了一次方法调用.
我有一个基于键执行更新插入的合并语句。(为简单起见,我们将其称为 RefId)。这是为了确保表是唯一的RefId
. 然而,在生产中,我们有多个服务器使用这个存储过程插入到这个表中,如果两个服务器以非常接近的间隔使用相同的 RefId 插入,则会发生重复(即 2 次插入)而不是 1 次插入和更新。我相信这是因为,SQL 服务器锁定了新插入的行,而另一个称为存储过程的并行无法检测到它的存在。MERGE 语句不支持 NoLock,因此我看不到明显的解决方法。我已经使用多个线程(而不是服务器)模拟了并行插入,并且在这种情况下偶尔也会发生重复。除了对数据库强制执行唯一约束(我无法控制的原因)之外,还有什么方法可以让我的 upsert 在并发情况下按预期工作?
这是存储的过程(当插入更新以合理的时间差进行时它可以正常工作,但在并行情况下会失败)
WITH UniqueData AS
( SELECT * FROM
( SELECT *, rank() over ( PARTITION BY RefId ) AS UniqueRank
FROM @Data
) AS Ranked WHERE UniqueRank=1
)
MERGE MyTable AS destination
USING UniqueData AS source
ON ( destination.RefId = source.RefId)
WHEN NOT MATCHED THEN
INSERT (RefId, Miles,UpdateUTC)
VALUES( source.RefId, source.Miles, getutcdate())
WHEN MATCHED THEN
UPDATE SET
destination.Miles = ISNULL(source.Miles , destination.Miles ),
destination.UpdateUTC …
Run Code Online (Sandbox Code Playgroud) 我的组织正在强调80%的线和分支覆盖率.我对线路覆盖要求完全没有问题,但分支覆盖范围给了我一个问题.
让我们举一个例子:
if(decisionA && decisionB)
{
// path A - do some complex ninja code stuff
}
else
{
// path B - tell user i can't do anything
}
Run Code Online (Sandbox Code Playgroud)
现在,我已经写了2个案例,第一个覆盖路径A,第二个覆盖路径B.这应该给我100%的线路覆盖率.但是,这只给了我50%的分支覆盖率,因为我只覆盖(True && True)+(False && False)而省略(True && False)+(False && True).
从我的角度来看,decisionA和decisionB的价值是微不足道的,几乎不值得测试.但是,我的组织中的一揽子要求现在意味着我必须编写4个测试用例而不是2个.带来多个if和嵌套if,这变得复杂.
对我来说,似乎开发人员决定是否选择覆盖分支案例,只要他认为重要的逻辑(在A部分中的忍者代码的情况下)被覆盖.
你对此有何看法?您认为可接受的分支机构覆盖率是多少?我对强制执行高分支机构覆盖率是否合理,或者我是否不足以强调代码质量?我知道这是一个主观问题,但肯定已经建立了良好的模式.
我有两个对象(相同类型),其中包含一个myprop
type 道具byte?
。属性设置为null
。当我执行时,objectA.myprop.Equals(objectB.myprop)
尽管MSDN代码示例指出“等于应用于任何null对象都返回false”,但结果还是为“ true” 。
我猜想C#使用单独的重载进行可空类型比较。我想知道在这种情况下C#如何在内部处理对象与可为空的类型。
我希望能够使用枚举值创建新的泛型类型.我相信这可以用C++模板,但我不知道是否可以使用C#.
所以我想做的是:
public class MyClass <T>
{
public void Do<T>() {}
}
public enum Metals
{
Silver, Gold
}
Run Code Online (Sandbox Code Playgroud)
我想通过一个枚举:
var myGoldClass = new MyClass<Metals.Gold>();
Run Code Online (Sandbox Code Playgroud)
我想我可以创建名为Gold,Silver的类来实现这一目标,但我非常喜欢使用枚举来约束我的泛型类的类型.
我在现实世界中想要这样的东西的原因是我正在创建一个事件聚合器(一个发布 - 订阅模型),我希望我的订阅者订阅某种类型的消息.所以我觉得这样会很好如果我可以让我的订阅者使用枚举订阅.
编辑: 澄清,Metals.Gold只是一个例子枚举.我希望客户端库创建自己的枚举\类并改为使用它.我自己并没有定义枚举.
我想知道为什么以下联接以无序方式返回值。确实表明IQueryable
不能保证传递的顺序,因此EF不会麻烦在SQL中生成order by子句。
var currentUtc = DateTime.Now;
var data = (from a in ItemsA
join c in Customers on a.Fk_CustomerID equals c.ID into customerSubset
from cs in customerSubset.DefaultIfEmpty()
where cs.Age > 18)
orderby a.ID ascending
select new
{
a.ID,
a.someProperty,
cs.CustomerUID,
CustomerName = cs.Name,
UpdateUTC = currentUtc
}).Distinct().Take(1000).ToList();
Run Code Online (Sandbox Code Playgroud)
奇怪的是,删除不重复项会在生成的SQL的内部查询中添加order by子句(您可以使用Linqpad查看为例如生成的SQL。)
现在,如果我将最后一行替换为
.Distinct().OrderBy(x => s.ID).Take(1000).ToList();
Run Code Online (Sandbox Code Playgroud)
无论是否orderby a.ID ascending
在内部查询中,我都在SQL中获得了order by子句。这是有道理的,但是为什么在orderby之后链接不同也不会产生相同的顺序?
c# ×5
sql-server ×2
.net ×1
code-metrics ×1
enums ×1
generics ×1
sql ×1
tfs ×1
unit-testing ×1