这是给你的一个难题.
我想更改以下比较方法,以便当两个项目被认为相等时,它们将随机洗牌.
myList.Sort( (x, y) => x.Score.CompareTo(y.Score) );
Run Code Online (Sandbox Code Playgroud)
我可以想象这个场景在订购搜索结果时很有用,如果你不想在他们的分数相同的情况下优先考虑一个结果而不是另一个结果.
有人想试一试吗?
这是我第一次尝试解决方案,但它不起作用.我会告诉你原因.
class RandomizeWhenEqualComparer<T> : IComparer<T>
{
private readonly Func<T, T, int> _comparer;
public int Compare(T x, T y)
{
if (x.Equals(y)) return 0;
int result = _comparer(x, y);
if (result != 0) return result;
double random = StaticRandom.NextDouble();
return (random < .5) ? -1 : 1;
}
public RandomizeWhenEqualComparer(Func<T, T, int> comparer)
{
_comparer = comparer;
}
}
Run Code Online (Sandbox Code Playgroud) 使用Visual Studio 2008和Resharper,ASPX文件通常需要很长时间才能保存吗?我通常发现平均PC(18个月大)需要大约10秒钟.它在做什么?
我发现自己编写了如下代码:
if (myEntity.Id == default(Guid))
Session.Save(myEntity);
Run Code Online (Sandbox Code Playgroud)
检查实体是否已经持久化(因此不需要保存)的最佳方法是什么?
我在编写这样的代码时做错了吗?
为什么这个测试失败了?
private class TestClass
{
public string Property { get; set; }
}
[Test]
public void Test()
{
var testClasses = new[] { "a", "b", "c", "d" }
.Select(x => new TestClass());
foreach(var testClass in testClasses)
{
testClass.Property = "test";
}
foreach(var testClass in testClasses)
{
Assert.That(!string.IsNullOrEmpty(testClass.Property));
}
}
Run Code Online (Sandbox Code Playgroud)
问题显然与Select语句中的延迟屈服有关,因为如果我在Select()方法之后添加.ToList()调用,则测试通过.
我正在开发一个应用程序,它将用作其他应用程序的可扩展框架.
其中一个基本类称为Node,而Nodes具有Content.SQL表看起来像这样:
TABLE节点(NodeId int,....等)
TABLE NodeContentRelationship(NodeId int,ContentType string,ContentId int)
扩展应用程序的开发人员将创建自己的内容类型.
显然,从关系数据库的角度来看,这是不好的,因为无法向NodeContentRelationship.ContentId添加外键关系,即使它是外键列.
但是,解决方案非常简单和强大,所以我不愿意改变它.
你觉得怎么样 - 我是否在追寻一个痛苦的世界?
algorithm ×1
asp.net ×1
c# ×1
comparison ×1
database ×1
foreign-keys ×1
linq ×1
nhibernate ×1
performance ×1
random ×1
relationship ×1
resharper ×1
sorting ×1
sql ×1