小编Sea*_*son的帖子

更清洁的方式将集合转换为另一种类型?

我有一个控件,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,我会收到其他错误.

这样做的正确方法是什么?

c# linq

4
推荐指数
1
解决办法
258
查看次数

是否有更清晰简洁的方式用更好的LINQ来表达这种说法?

我有两个元素集合.我试图在第一个集合中获取第二个集合中具有匹配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)

c# linq

4
推荐指数
1
解决办法
128
查看次数

客户端是否可以为写入数据库的对象可靠地生成PK?

我一直在为这个困境烦恼一段时间,我以为我会接近这个.

关于我的场景的一些背景知识:

  • 我有播放列表,其中包含0个或更多PlaylistItem子项.
  • 播放列表不经常创建.因此,我可以从服务器请求GUID,等待响应,并在成功时刷新UI以显示已成功添加的播放列表.
  • PlaylistItem对象经常创建.因此,当我等待服务器使用UUID进行响应时,我不能使用加载消息.

我知道,最后一个事实是优化,但我认为它极大地提高了程序的可用性.

不过,我想讨论我唯一识别客户端对象的选项.我首先要强调我尝试过但失败的两个选项,然后是我正在考虑的第三个选项.我希望能够深入了解其他可能的解决方案.


生成将保留到服务器的PK UUID客户端.

这是我的第一选择.这是一个明显的决定,但有一些明显的缺点.这里的第一个问题是客户端UUID不能也不应该被信任用于此类目的.恶意用户可以轻松强制PK冲突.此外,我的理解是,如果我选择生成UUID客户端,我应该期待更大的碰撞机会.抓那个.

基于播放列表GUID和播放列表中的位置生成复合PK

我认为这对我的问题来说是一个棘手但很好的解决方案.PlaylistItem的位置对于给定的播放列表集合是唯一的,并且它可以在客户端和服务器端派生.这似乎是一个很好的解决方案.不幸的是,让我的位置成为PK的一部分打破了我PK的不变性.每当重新排序或删除PlaylistItem时,都需要更新大量的PlaylistItem键.抓那个.

基于播放列表GUID和自动增量PlaylistItem ID生成复合PK

该解决方案类似于上述解决方案,但通过将复合键与位置分离来确保PK是不可变的.这是我正在考虑的当前解决方案.我唯一担心的是恶意用户可能会在发送之前通过修改客户端的自动增加ID来强制冲突.我不认为这种恶意行为会对系统造成任何伤害,而是需要考虑的事情.

好的!你有它.做这一切我是愚蠢的吗?我只是吮吸它并强制我的服务器为我的PlaylistItem对象生成GUID吗?或者,是否可以编写适当的实现?

更新:

我希望在服务器成功保存到数据库之前直观地表示用户的操作,并在保存失败时实现所需的恢复技术.我不确定这是否是傻瓜,但我将通过一个用例场景解释我的推理:

客户想要添加一个新的PlaylistItem.为此,我们会针对创建PlaylistItem的所有必要信息向YouTube API发出请求.在YouTube的API响应后,客户端拥有创建PlaylistItem的所有必要信息,但能够唯一识别它.

此时,用户已经等待了YouTube API的X时间范围.现在,我想在客户端上直观地显示PlaylistItem.如果我选择等待服务器,我现在正在等待X + Y时间帧,然后才能看到成功.在测试中,这种延迟感觉很尴尬.

我的服务器只是亚马逊EC2上的微型实例.我可以通过升级硬件来减少Y时间帧,但我可以通过巧妙的编程完全消除Y. 这是我所面临的困境.

optimization guid client-server primary-key

4
推荐指数
1
解决办法
353
查看次数

不区分大小写的包装子字符串和标签

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是区分大小写的我相信 - 这让事情变得有点复杂我想?

javascript regex

4
推荐指数
1
解决办法
1409
查看次数

扩展自定义Backbone.Marionette视图.如何隐含地引发原型事件/ onRender?

我有一个观点:

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有什么东西可以让我以更加无缝的方式扩展我的自定义视图吗?

javascript backbone.js marionette

4
推荐指数
1
解决办法
4539
查看次数

从MVC的DependencyResolver过渡到AutofacWebApiDependencyResolver - 哪里是.Current?

我让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)

c# autofac asp.net-web-api

4
推荐指数
1
解决办法
4517
查看次数

将可空整数初始化为默认值的最佳实践?

我遇到了一些设置可空整数的代码,如下所示:

int? xPosition = new int?();
Run Code Online (Sandbox Code Playgroud)

这对我来说是一种不熟悉的语法.我希望这些形式中的任何一种:

int? xPosition = null;
int? xPosition = default(int?);
Run Code Online (Sandbox Code Playgroud)

这三个变量声明之间是否存在功能差异?

c# nullable

4
推荐指数
1
解决办法
1312
查看次数

DateTime to string,将换行符格式化为字符串,同时保留文化

我有一个时间戳,我想表示为两行.目前,我正在使用"timeStamp.ToString("dd/MM/yyyy \n hh:mm:ss tt")."

我想保留这种文化,这样,当全球化成为一个问题时,这个时间戳就会正确显示.

有没有一种简单的方法来实现这一目标?或者,我是否需要执行类似... string.Format("{0} \n {1}",timeStamp.Date.ToString(),timeStamp.Time.ToString()); ?

谢谢

c# globalization datetime

3
推荐指数
1
解决办法
2948
查看次数

返回JsonResult会出现Server 500错误?

首次尝试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中的警报永远不会显示.

c# json asp.net-mvc-2

3
推荐指数
1
解决办法
1531
查看次数

将未实现接口但符合所有条件的对象添加到期望接口的列表中

我有以下内容:

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# interface anonymous-types

3
推荐指数
1
解决办法
455
查看次数