我有覆盖GetHashCode,Equals并且两种方法为不同的对象提供相同的结果,但为什么仍然得到假?
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new Person("james") == new Person("james"));
Console.ReadKey();
}
}
class Person
{
private string Name;
public Person(string name)
{
Name = name;
}
public override int GetHashCode()
{
return 1;
}
public override bool Equals(object obj)
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud) //ModelFor(person =>person.Name);
public void ModelFor<TModel, TValue>(
Expression<Func<TModel, TValue>> expression)
{
//Result should be "Name"
string nameOfTValue = ????;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用HTML 5历史API来保存ajax请求时的状态,如果用户请求同一页面没有ajax请求,我提供完整的html内容.
浏览器的"重新打开最后关闭的选项卡"功能带来了最后的ajax请求内容而无需点击服务器.如果浏览器会在没有带上一个请求内容的情 但浏览器只显示最后的ajax请求内容.
我在Chrome 17,Firefox 10上遇到过这种情况.(我没有在ie9上尝试过,因为它没有支持历史记录api)
什么是这个问题的众所周知的解决方案?
编辑:这些ajax请求只是向服务器"获取"请求.
它真的不可能在jsfiddle.net中展示它,因为几乎没有理由.您可以在本地主机中演示它,如下所示.
向服务器发出"get"请求并拉出json对象,然后将该url推送到历史api中,如下所示.
history.pushState(null,null,url);
Run Code Online (Sandbox Code Playgroud)
然后关闭该选项卡,然后单击浏览器的"重新打开上次关闭的选项卡"功能.你看到了什么 ?Json回应身体?浏览器显示它而不向服务器发出请求,对吧?
我试图掌握规范模式,我对它有点困惑.我真的觉得它对我的具体要求没有帮助.我想知道如果我更喜欢扩展方法来解决我的复杂问题,那会是什么问题?例如
public static class ProductExtensions
{
public static IQueryable<Product> InStocks(this IQueryable<Product> query)
{
return query.Where(p => p.InStock && !p.IsDeleted /*others goes here*/);
}
}
Run Code Online (Sandbox Code Playgroud)
我发现用扩展方法包装我的长规格而不是使用spesification模式很有帮助.这有什么问题?
当我使用EF 4.1代码第一种方法与Sql compact 4时,我收到此错误消息.我没有看到任何模型谁有id列多个,所以我不知道为什么会出现这个错误.什么可能导致此错误?
编辑:我想说明一些额外的事情.数据库创建是成功的,但模型创建不是.并且已经从sqlce方法抛出了异常.
我已经通过nuget包下载了DynamicLinq库.我用它如下
db.ReservationSet.Where("blbalbabla",1,2)
Run Code Online (Sandbox Code Playgroud)
但我得到以下异常.
错误38以下方法或属性之间的调用不明确:'System.Linq.Dynamic.DynamicQueryable.Where(System.Linq.IQueryable,string,params object [])'和'System.Linq.Dynamic.DynamicQueryable.Where( System.Linq.IQueryable,string,params object [])'F:\ Projects\IEKeysNew\IEKEYS\Controllers\ReportController.cs 145 22 IEKEYS
这是两种方法的标志.
public static IQueryable<T> Where<T>(this IQueryable<T> source, string predicate, params object[] values);
public static IQueryable Where(this IQueryable source, string predicate, params object[] values);
Run Code Online (Sandbox Code Playgroud)
我无法找到摆脱这个编译时异常的东西.
这就是我想要构建我的html的方法
<a href="#">John <i class="person"></i></a>
Run Code Online (Sandbox Code Playgroud)
有了knockout.js,这就是我所做的.
<a data-bind="text:name"><i class="person"></i></a>
Run Code Online (Sandbox Code Playgroud)
正如您可以猜测锚的整个元素(不仅仅是文本)被删除,因为在这种情况下,文本绑定中的整个标记被移除.我的解决方案如下.
<a data-bind="html: name() + '<i class="person"></i>'"></a>
Run Code Online (Sandbox Code Playgroud)
在data-bind中使用html进行字符串连接是一种解决方案,但它有两大缺点.'name'propery不安全所以我们可以得到html注入.在数据绑定属性中写入html是很糟糕的.
另一个解决方案是
<a href="#"><span data-bind="text:name"></span><i class="person"></i></a>
Run Code Online (Sandbox Code Playgroud)
我知道我们为解决方案引入了新的html标记.这是我发现最好的.
knockout.js中这个问题的众所周知的解决方案是什么?
我们可以指定只更新文本而不是通过参数更新文本内部的整个元素吗?
或更好的解决方案
我以为WinForms是和其他类一样的类.但是从项目开始让我感到困惑.为什么新的Form从Application.Run开始,它内部发生了什么样的机制?
属性有助于我们使用类依赖值而不是实例,它们可以帮助我们携带一些与我们的类没有强关系的值.但我发现了一些属性限制.我们无法在运行时更改这些值.所以我正在寻找一种方法来使用类似的属性概念,因为我们已经看到许多示例配置类由流畅的apis而不是属性.你知道这样一个现成的图书馆吗?使用属性概念避免属性限制的替代方法是什么?
例如
function Model(){};
var model = new Model();
ko.applyBinding(model);
model.name = ko.observable('john');
Run Code Online (Sandbox Code Playgroud)
我知道代码不起作用,但有可能使它工作吗?
c# ×7
.net ×6
javascript ×3
knockout.js ×2
ajax ×1
annotations ×1
attributes ×1
equals ×1
gethashcode ×1
html ×1
html5 ×1
reflection ×1
web ×1
winforms ×1