小编AAA*_*ddd的帖子

将所有非Alpha数字字符,新行和多个空格替换为一个空格

我正在寻找一个简洁的RegEx解决方案来取代

  • 所有非Alpha数字字符
  • 所有NewLines
  • 所有多个空格实例

有一个空间


对于那些在家里玩的人(以下工作)

text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
Run Code Online (Sandbox Code Playgroud)

我的想法是RegEx可能足以在一个声明中实现这一点.我觉得id需要的组件是

  • [^a-z0-9] - 删除非Alpha数字字符
  • \s+ - 匹配任何空间集合
  • \r?\n|\r - 匹配所有新行
  • /gmi - 全局,多行,不区分大小写

但是,我似乎无法以正确的方式设置正则表达式(以下不起作用)

text.replace(/[^a-z0-9]|\s+|\r?\n|\r/gmi, " ");
Run Code Online (Sandbox Code Playgroud)


输入

234&^%,Me,2 2013 1080p x264 5 1 BluRay
S01(*&asd 05
S1E5
1x05
1x5
Run Code Online (Sandbox Code Playgroud)


期望的输出

234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5
Run Code Online (Sandbox Code Playgroud)

javascript regex replace alphanumeric

118
推荐指数
6
解决办法
13万
查看次数

List <T> .RemoveAll()效率/编译器优化

关于效率,有谁知道编译器是否足够聪明,无法1, 3, 5在以下代码中创建包含循环的每次迭代的数组?

var foo = new List<int> { 1, 2, 3, 4, 5 };
foo.RemoveAll(i => new[] { 1, 3, 5 }.Contains(i));
Run Code Online (Sandbox Code Playgroud)

我更喜欢它是为了提高可读性,但不是出于性能考虑。

c# linq arrays list compiler-optimization

24
推荐指数
2
解决办法
1341
查看次数

在不更新行版本的情况下检查实体的并发性

我有一个父实体,需要进行并发检查(如下所示)

[Timestamp]
public byte[] RowVersion { get; set; }
Run Code Online (Sandbox Code Playgroud)

我有一堆客户机进程,它们从该父实体访问只读值,并主要更新子实体

约束

  1. 客户之间不应干涉彼此的工作(例如,更新子记录不应在父实体上引发并发异常)。

  2. 我有一个确实更新父实体服务器进程,在这种情况下,如果父实体已更改,则客户端进程需要抛出。

注意:客户端的并发检查是牺牲性的,服务器的工作流程是关键任务

问题

我需要检查(从客户端进程中父实体是否已更改,而没有更新父实体的行版本

EF中父实体进行并发检查很容易:

// Update the row version's original value
_db.Entry(dbManifest)
      .Property(b => b.RowVersion)
      .OriginalValue = dbManifest.RowVersion; // the row version the client originally read

// …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework database-concurrency entity-framework-6

16
推荐指数
1
解决办法
740
查看次数

Cast Binding Path,以便在Design-Time识别ViewModel属性

好吧,这更令人烦恼而不是问题.没有错误

<ContentPage
   ...
   x:Name="This"
   //hack to have typed xaml at design-time
   BindingContext="{Binding Source={x:Static viewModels:ViewModelLocator.ChooseTargetLocationVm}}"
Run Code Online (Sandbox Code Playgroud)

子视图

<views:ProductStandardView
    ...
    BindingContext="{Binding Product}">
    <Grid.Triggers>
        <DataTrigger
            Binding="{Binding Path=BindingContext.IsVacate, Source={x:Reference This}}"
            TargetType="Grid"
            Value="true">
            <Setter Property="BackgroundColor" Value="{StaticResource WarningColor}" />
        </DataTrigger>
    </Grid.Triggers>
Run Code Online (Sandbox Code Playgroud)

绑定BindingContext 参考This,我得到一个XAML"警告"

无法在"对象"类型的数据上下文中解析属性"IsVacate"

Binding="{Binding Path=BindingContext.IsVacate, Source={x:Reference This}}"
Run Code Online (Sandbox Code Playgroud)

显然,BindingContext是一个对象并且是无类型的.但是上面的代码编译和工作

我想要做的就是施放它,首先是因为我有OCD,但主要是因为它很容易在IDE页面通道栏上发现真正的问题

以下似乎合乎逻辑但不起作用

Binding="{Binding Path=BindingContext.(viewModels:ChooseTargetLocationVm.IsVacate), 
                  Source={x:Reference This}}"
Run Code Online (Sandbox Code Playgroud)

在输出中我得到

[0:]绑定:'(viewModels:ChooseTargetLocationVm'找不到属性' Inhouse.Mobile.Standard.ViewModels.ChooseTargetLocationVm',目标属性:' Inhouse.Mobile.Standard.Views.ProductStandardView.Bound'

我理解错误,但我还会怎么样?


只是为了愚蠢,显然以下不会编译

Binding="{Binding Path=((viewModels:ChooseTargetLocationVm)BindingContext).IsVacate, Source={x:Reference This}}"
Run Code Online (Sandbox Code Playgroud)

那么有没有办法将BindingContext转换为ViewModel, …

c# xamarin.forms

10
推荐指数
1
解决办法
565
查看次数

泛型中的协方差与Func的协方差

我需要有关泛型和委托方差的更多信息.以下代码段无法编译:

错误CS1961无效方差:类型参数'TIn'必须在'Test.F(Func)'上协变有效.'TIn'是逆变的.

public interface Test<in TIn, out TOut>
{
    TOut F (Func<TIn, TOut> transform);
}
Run Code Online (Sandbox Code Playgroud)

.net Func定义如下:

public delegate TResult Func<in T, out TResult> (T arg);
Run Code Online (Sandbox Code Playgroud)

为什么编译器抱怨TIn逆变和TOut- 协变而Func期望完全相同的方差?

编辑

对我来说主要的限制是我希望我的Test界面将TOut作为协变,以便使用它:

public Test<SomeClass, ISomeInterface> GetSomething ()
{
    return new TestClass<SomeClass, AnotherClass> ();
}
Run Code Online (Sandbox Code Playgroud)

鉴于此public class AnotherClass : ISomeInterface.

c# generics variance

9
推荐指数
2
解决办法
1003
查看次数

通用类型推断,Fluent Api,具有预先声明的类型

我正在开发一个Fluent Api来提供相当可配置的服务,并且只是尝试为下面的问题提供一个简洁的解决方案.

我有一个这样的课

public class WindowVm : DialogResultBase<MyReturnType>
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是任何人都可以想到一种方法来实现以下,而不必详细说明给定的第二种通用​​类型即

public IDialogWithResult<TViewModel, TSomeReturnType> DialogWithResult<TViewModel,TSomeReturnType>(object owner = null)
        where TViewModel : DialogResultBase<TSomeReturnType>
Run Code Online (Sandbox Code Playgroud)

IDialogWithResult<TViewModel, TSomeReturnType>即使我必须在2个陈述中做到这一点,我真的只对结果感兴趣

所以我可以打电话

.DialogWithResult<WindowVm>()
Run Code Online (Sandbox Code Playgroud)

我知道所有信息都在那里并在编译时声明,我也知道这是部分推理及其全部或全部.然而,我只是想知道是否有一些技巧,而不必重新声明

.DialogWithResult<WindowVm, ResultType>(); 
Run Code Online (Sandbox Code Playgroud)

此外,我有一个方法需要ResultType作为(你猜对了)一个结果类型

ResultType MyResult =  ...DialogWithResult<WindowVm, ResultType>()
                         .ShowModal(); 
Run Code Online (Sandbox Code Playgroud)

我的意思ResultType是,在游戏的这一点上真的是多余的,因为它已经被宣布了WindowVm.如果消费者不必去寻找它(即使它意味着超过一步),那将是很好的

c# generics type-inference

9
推荐指数
2
解决办法
381
查看次数

使用params object []构造函数的属性会产生不一致的编译器错误

我收到了错误

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

请注意下面的截图:

在此输入图像描述

请注意,如果我将DataRow属性与一个或三个参数一起使用,则不会出现编译错误.但是如果我使用两个参数而第二个参数是一个字符串数组,那么我确实会遇到编译错误.

DataRowAttribute的签名是public DataRowAttribute (object data1);public DataRowAttribute (object data1, params object[] moreData);

第一个给了我没问题,但第二个似乎变得困惑.

我认为params object[]可能会引起一些混乱.也许它无法确定我的意思[DataRow(new[] { 1 }, new[] { "1" })]还是[DataRow(new[] { 1 }, "1")]

为了解决这个问题,我尝试将第二个属性转换为object([DataRow(new[] { 1 }, (object)new[] { "1" })]),但错误没有消失,它警告我演员阵容是多余的.我也尝试明确指定数组的类型,但这也没有帮助.

我可以添加第三个虚拟参数,即使null似乎解决了这个问题,但这只是一种解决方法.这样做的正确方法是什么?

c# .net-attributes

8
推荐指数
2
解决办法
505
查看次数

机器人如何在Slack中启动一个线程

我试图通过启动一个线程让我的机器人框架机器人回复用户.通过这种方式,我可以在一个有很多人的频道中保持机器人正在与谁交谈.

根据松弛的文档,我需要做的是将thread_ts属性设置为ts发送到我的机器人的属性.我尝试了一些事情并且无法实现这一目标.这是我最简洁的例子:

var reply = (Activity)activity;
reply = reply.CreateReply("reply");

reply.ChannelData = JObject.Parse($"{{thread_ts:'{ts}'}}");
await context.PostAsync(reply);
Run Code Online (Sandbox Code Playgroud)

这不适合我.

c# slack botframework

7
推荐指数
1
解决办法
425
查看次数

链接列表:添加元素时为什么current.Next指向新节点,为什么我们覆盖当前节点

我是C#的初学者,我通过解决数据结构案例场景来解决它.我需要帮助可视化以下代码段中发生的事情

public void AddAtLast(object data)
{
   Node newNode = new Node();
   newNode.Value = data;
   current.Next = newNode;
   current = newNode;
   Count++;
}
Run Code Online (Sandbox Code Playgroud)

我明白了什么部分

我知道在链表的末尾添加了一个新节点.此外,新节点从函数参数获取其值.

我需要帮助的是什么

我特别想到为什么current.Next指向newNode,不应该指向NULL,因为我newNode将被放置在链表的末尾,所以它应该指向NULL.

另外,我们为什么这样做current=newNode

我理解为什么count++存在可能是因为想要跟踪添加新元素的位置,但如果我的理解错误,请纠正我.

c# linked-list data-structures

7
推荐指数
1
解决办法
148
查看次数

如何将2个泛型类型传递给扩展方法

我创建了以下扩展方法

public static T Map<TEntity,T>(this TEntity entity) where TEntity : IEntity
{
    return Mapper.Map<TEntity, T>(entity);        
}
Run Code Online (Sandbox Code Playgroud)

这允许以下内容

Db.ExchangeSets.FirstOrDefault().Map<ExchangeSet, ExchangeSetSimpleViewModel>()
Run Code Online (Sandbox Code Playgroud)

但是我想知道无论如何我可以修改扩展方法,所以我可以调用如下的短路版本

Db.ExchangeSets.FirstOrDefault().Map<ExchangeSetSimpleViewModel>()
Run Code Online (Sandbox Code Playgroud)

请注意 :

是否应该像这样使用automapper不在问题的范围内,它更像是一个事实发现任务


更新

对于那些在家里玩的人,在scotts评论的帮助下,我设法找到一个额外的解决上述功能的通用扩展方法为automapper

public static T Map<T>(this IEntity entity) 
{
    return (T)Mapper.Map(entity, entity.GetType(), typeof(T));  
}
Run Code Online (Sandbox Code Playgroud)

但是除了AutoMapper之外,这不是实际问题的答案,而是相应地标记优点

c# generics extension-methods

6
推荐指数
1
解决办法
1984
查看次数