我有一个控件,RadTabStrip,其中包含:public RadTabCollection Tabs { get; }.RadTabCollection类继承自:public class RadTabCollection : ControlItemCollection, IEnumerable<RadTab>, IEnumerable
现在,我有一个CormantRadTab列表.该类继承:public class CormantRadTab : RadTab, ICormantControl<RadTabSetting>
我的目标是使用RadTabCollection填充CormantRadTab列表.目前,我实施了这个:
List<CormantRadTab> oldTabs = new List<CormantRadTab>(Tabs.Count);
foreach( CormantRadTab tab in Tabs)
{
oldTabs.Add(tab);
}
Run Code Online (Sandbox Code Playgroud)
我真的觉得我应该能够做一些事情,比如:
List<CormantRadTab> oldTabs = new List<CormantRadTab>(Tabs.AsEnumerable<RadTab>());
Run Code Online (Sandbox Code Playgroud)
但这与New List期望的过载签名不匹配.如果我尝试强制转换AsEnumerable CormantRadTab,我会收到其他错误.
这样做的正确方法是什么?
我有两个元素集合.我试图在第一个集合中获取第二个集合中具有匹配ID的所有元素,并针对匹配元素运行CopyToDomain方法.
以下代码工作正常,但我对它的详细程度感到有些惊讶.ReSharper在这里没有推荐任何东西,但我想知道是否在这两个集合中进行交集然后将方法映射到元素上会更清楚吗?你会做出这样的改变吗,还是我应该停止烦恼并保持原样?
Task task = new Task();
IList<TaskAttributeDto> taskAttributeDtos = new List<TaskAttributeDto>();
taskAttributeDtos.Add(new TaskAttributeDto{ ID = 1});
taskAttributeDtos.Add(new TaskAttributeDto{ ID = 2});
foreach (TaskAttributeDto taskAttributeDto in taskAttributeDtos)
{
TaskAttribute matching = task.TaskAttributes.FirstOrDefault(t => t.ID == taskAttributeDto.ID);
if (matching != null)
{
taskAttributeDto.CopyToDomain(matching);
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在为这个困境烦恼一段时间,我以为我会接近这个.
关于我的场景的一些背景知识:
我知道,最后一个事实是优化,但我认为它极大地提高了程序的可用性.
不过,我想讨论我唯一识别客户端对象的选项.我首先要强调我尝试过但失败的两个选项,然后是我正在考虑的第三个选项.我希望能够深入了解其他可能的解决方案.
这是我的第一选择.这是一个明显的决定,但有一些明显的缺点.这里的第一个问题是客户端UUID不能也不应该被信任用于此类目的.恶意用户可以轻松强制PK冲突.此外,我的理解是,如果我选择生成UUID客户端,我应该期待更大的碰撞机会.抓那个.
我认为这对我的问题来说是一个棘手但很好的解决方案.PlaylistItem的位置对于给定的播放列表集合是唯一的,并且它可以在客户端和服务器端派生.这似乎是一个很好的解决方案.不幸的是,让我的位置成为PK的一部分打破了我PK的不变性.每当重新排序或删除PlaylistItem时,都需要更新大量的PlaylistItem键.抓那个.
该解决方案类似于上述解决方案,但通过将复合键与位置分离来确保PK是不可变的.这是我正在考虑的当前解决方案.我唯一担心的是恶意用户可能会在发送之前通过修改客户端的自动增加ID来强制冲突.我不认为这种恶意行为会对系统造成任何伤害,而是需要考虑的事情.
好的!你有它.做这一切我是愚蠢的吗?我只是吮吸它并强制我的服务器为我的PlaylistItem对象生成GUID吗?或者,是否可以编写适当的实现?
更新:
我希望在服务器成功保存到数据库之前直观地表示用户的操作,并在保存失败时实现所需的恢复技术.我不确定这是否是傻瓜,但我将通过一个用例场景解释我的推理:
客户想要添加一个新的PlaylistItem.为此,我们会针对创建PlaylistItem的所有必要信息向YouTube API发出请求.在YouTube的API响应后,客户端拥有创建PlaylistItem的所有必要信息,但能够唯一识别它.
此时,用户已经等待了YouTube API的X时间范围.现在,我想在客户端上直观地显示PlaylistItem.如果我选择等待服务器,我现在正在等待X + Y时间帧,然后才能看到成功.在测试中,这种延迟感觉很尴尬.
我的服务器只是亚马逊EC2上的微型实例.我可以通过升级硬件来减少Y时间帧,但我可以通过巧妙的编程完全消除Y. 这是我所面临的困境.
var searchText = "hello world";
var searchTextRegExp = new RegExp(searchText , "i"); // case insensitive regexp
var text = "blahblah Hello Worldz";
text.replace(searchTextRegExp , '<match>' + searchText + '</match>');
Run Code Online (Sandbox Code Playgroud)
我正在努力改进这段代码.目前,它降低了Hello World的范例,因为它使用searchText作为替换值.
我希望只使用标记包装Hello World,而不是修改其大写或小写,同时仍保持不区分大小写的搜索.
这样做的好方法是什么?string.indexOf是区分大小写的我相信 - 这让事情变得有点复杂我想?
我有一个观点:
var MultiSelectCompositeView = Backbone.Marionette.CompositeView.extend({
events: {
'click .listItem': 'setSelectedOnClick'
},
onRender: function () {
console.log("MultiSelectCompositeView onRender has executed.");
}
});
Run Code Online (Sandbox Code Playgroud)
我有另一个扩展MultiSelectCompositeView的视图:
var VideoSearchView = MultiSelectCompositeView.extend({
events: _.extend(MultiSelectCompositeView.prototype.events, {
'input @ui.searchInput': 'showVideoSuggestions',
'click button#hideVideoSearch': 'destroyModel',
'contextmenu @ui.videoSearchResults': 'showContextMenu'
},
onRender: function () {
this.ui.playlistActions.append((new PlaySelectedButtonView()).render().el);
this.ui.playlistActions.append((new SaveSelectedButtonView()).render().el);
// TODO: Is there a better way to do this?
MultiSelectCompositeView.prototype.onRender.call(this, arguments);
}
});
Run Code Online (Sandbox Code Playgroud)
我对VideoSearchView不会隐式扩展MultiSelectCompositeView的事件以及VideoSearchView必须手动调用MultiSelectCompositeView的onRender方法这一事实感到不满.
Backbone.Marionette有什么东西可以让我以更加无缝的方式扩展我的自定义视图吗?
我让AutoFac与MVC4一起正常工作.我正在尝试过渡到Web API 2.这是我设置AutoFac的原因:
public class AutofacRegistrations
{
public static void RegisterAndSetResolver()
{
// Create the container builder.
var containerBuilder = new ContainerBuilder();
// Register the Web API controllers.
containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());
// Only generate one SessionFactory ever because it is expensive.
containerBuilder.Register(x => new NHibernateConfiguration().Configure().BuildSessionFactory()).SingleInstance();
// Everything else wants an instance of Session per HTTP request, so indicate that:
containerBuilder.Register(x => x.Resolve<ISessionFactory>().OpenSession()).InstancePerApiRequest();
containerBuilder.Register(x => LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType)).InstancePerApiRequest();
containerBuilder.RegisterType<NHibernateDaoFactory>().As<IDaoFactory>().InstancePerApiRequest();
containerBuilder.RegisterType<StreamusManagerFactory>().As<IManagerFactory>().InstancePerApiRequest();
// Build the container.
ILifetimeScope container = containerBuilder.Build();
// Create the depenedency resolver.
var dependencyResolver …Run Code Online (Sandbox Code Playgroud) 我遇到了一些设置可空整数的代码,如下所示:
int? xPosition = new int?();
Run Code Online (Sandbox Code Playgroud)
这对我来说是一种不熟悉的语法.我希望这些形式中的任何一种:
int? xPosition = null;
int? xPosition = default(int?);
Run Code Online (Sandbox Code Playgroud)
这三个变量声明之间是否存在功能差异?
我有一个时间戳,我想表示为两行.目前,我正在使用"timeStamp.ToString("dd/MM/yyyy \n hh:mm:ss tt")."
我想保留这种文化,这样,当全球化成为一个问题时,这个时间戳就会正确显示.
有没有一种简单的方法来实现这一目标?或者,我是否需要执行类似... string.Format("{0} \n {1}",timeStamp.Date.ToString(),timeStamp.Time.ToString()); ?
谢谢
首次尝试MVC.试图返回JsonResult.我在我的控制器中有这个:
[AcceptVerbs(HttpVerbs.Get)]
public JsonResult GetHistoricalReports()
{
JsonResult result = Json("test");
//JsonResult result = Json(DashboardSessionRepository.Instance.HistoricalReports);
return result;
}
Run Code Online (Sandbox Code Playgroud)
在我看来:
function OnHistoricalListBoxLoad(historicalListBox) {
$.getJSON('GetHistoricalReports', function (data) {
alert(data);
}
Run Code Online (Sandbox Code Playgroud)
我在GetHistoricalReports中设置了一个断点,它确实被击中了.但是,OnHistoricalListBoxLoad中的警报永远不会显示.
我有以下内容:
List<IReport> myList = new List<IReport>();
Report myReport = TheirApi.GetReport();
Run Code Online (Sandbox Code Playgroud)
myReport符合IReport的所有资格,但无法实现IReport,因为我无法访问ItsApi的源代码.转换为IReport类型显然会导致null,我读到我无法将匿名类型转换为接口.
我有什么选择吗?
包装类正是医生所要求的:
ReportServices.GetAllCustomReports().ToList().ForEach(customReport => _customReports.Add(new ReportWrapper(customReport)));
public class ReportWrapper : IReport
{
private Report inner;
public int ID
{
get { return inner.ID; }
set { inner.ID = value; }
}
public string Name
{
get { return inner.Name; }
set { inner.Name = value; }
}
public ReportWrapper(Report obj)
{
inner = obj;
}
}
Run Code Online (Sandbox Code Playgroud) c# ×7
javascript ×2
linq ×2
autofac ×1
backbone.js ×1
datetime ×1
guid ×1
interface ×1
json ×1
marionette ×1
nullable ×1
optimization ×1
primary-key ×1
regex ×1